home *** CD-ROM | disk | FTP | other *** search
Text File | 2003-02-21 | 128.3 KB | 3,988 lines |
- <%
- '
- ' Copyright (c) Microsoft Corporation. All rights reserved.
- '
- Const CONST_SUCCESS = 0
-
- 'const error codes
- Const CONST_USER_NOTFOUND_ERRMSG = &H800708AD
- Const CONST_OBJECT_EXISTS_ERRMSG = &H80071392
- Const CONST_OBJECT_NOTEXISTS_ERRMSG = &H80072030
- Const CONST_QUOTA_USER_NOTFOUND_ERRMSG = &H80070002
- Const CONST_LDAP_SERVER_NOTOP = &H8007203A
- Const CONST_LDAP_SERVER_NOTEXIST = &H8007200A
- Const CONST_DOMAINROLE_ERROR = &H10
- Const wbemErrNotFound = &H80041002
-
- Const WBEMFLAG = 131072
-
- Const CONST_SITE_STARTED = &H2
- Const CONST_SITE_STOPPED = &H4
- Const CONST_SITE_PAUSED = &H6
-
- 'file perm constants
- Const CONST_FULLCONROL = &H1F01FF
- Const CONST_MODIFYDELTE = &H1301BF
- Const CONST_READEXEC = &H1200A9
-
- ' From ntioapi.h
- ' #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\
- ' FILE_READ_DATA |\
- ' FILE_READ_ATTRIBUTES |\
- ' FILE_READ_EA |\
- ' SYNCHRONIZE)
- Const FILE_GENERIC_READ = &H120089
-
- 'sid string constants
-
- ' From ntseapi.h
- '// Interactive S-1-5-4
- Const SIDSTRING_INTERACTIVE = "S-1-5-4"
-
-
- 'reg constants
- Const CONST_WEBBLADES_REGKEY = "Software\Microsoft\ServerAppliance"
- Const CONST_WEBSITEROOT_REGVAL = "WebSiteRoot"
- Const CONST_FTPSITEROOT_REGVAL = "FtpRoot"
- Const CONST_FPSEOPTION_REGVAL = "FPSEOption"
- Const CONST_FTPSITEID_REGVAL = "AdminFTPServerName"
-
- 'website root and ftp site root constants
- Const CONST_DEF_WEBROOT = "Websites"
- Const CONST_DEF_FTPROOT = "Web Site Content FTP root"
- Const CONST_QUOTASTATE = "Unable to create directory"
- Const CONST_FRONTPAGE_PATH = "W3SVC/Filters/fpexedll.dll"
- Const CONST_FRONTPAGE_2002_INSTALLED = "Setup Packages"
- Const CONST_SHAREPOINT_INSTALLED = "SharePoint"
-
- 'security permission constants
- Const ADS_RIGHT_GENERIC_READ = &H80000000
- Const ADS_RIGHT_GENERIC_ALL = &H10000000
-
- Const ADS_RIGHT_DS_CREATE_CHILD = &H1
- Const ADS_RIGHT_DS_DELETE_CHILD = &H2
-
- Const ADS_ACETYPE_ACCESS_ALLOWED = 0
- Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5
-
- Const ADS_FLAG_OBJECT_TYPE_PRESENT = &H1
- Const ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT = &H2
- Const ADS_ACEFLAG_INHERIT_ACE = &H2
- Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8
-
- 'A list of the various object GUIDs
- Const USERGUID = "{BF967ABA-0DE6-11D0-A285-00AA003049E2}"
- Const GROUPGUID = "{bf967a9c-0de6-11d0-a285-00aa003049e2}"
- Const OUGUID = "{bf967aa5-0de6-11d0-a285-00aa003049e2}"
-
- 'Error constants for CreateSitePath function
- Const CONST_CREATE_FSOBJ_FAILED = &H100
- Const CONST_INVALID_DRIVE = &H101
- Const CONST_NOTNTFS_DRIVE = &H102
- Const CONST_FAILED_TOCREATE_DIR = &H103
-
- ' Front Page related constants
- Const CONST_FRONTPAGE_REGLOC = "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\4.0"
- Const CONST_FRONTPAGE_2002_REGLOC = "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0"
- Const CONST_PORT_REGLOC = "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\Ports\"
- Const CONST_NOLIMIT_TEXT = "No limit"
-
- 'Domain Role
- Const MEMBER_ADDC = 0
- Const MEMBER_NTDC = 1
- Const WORKSTATION = 1
- Const MEMBER_WORKGROUP = 2
- Const MEMBER_DOMAIN = 3
- Const BACKUP_DOMAIN_CONTROLLER = 4
- Const PRIMARY_DOMAIN_CONTROLLER = 5
- Const DOMAIN_CONTROLLER = 6
-
- 'Add for globalization of Web/FTP log settings
- Const CONST_MSIISLOGFILE_FORMAT = "Microsoft IIS Log File Format"
- Const CONST_NCSALOGFILE_FORMAT = "NCSA Common Log File Format"
- Const CONST_ODBCLOGFILE_FORMAT = "ODBC Logging"
- Const CONST_W3CEXLOGFILE_FORMAT = "W3C Extended Log File Format"
-
- 'Running state of the service
- Const CONST_SERVICE_RUNNING_STATE = "Running"
-
- 'Running state of FTP server (serverstate = 2, started)
- Const CONST_FTPSERVER_RUNNING_STATE = 2
- 'Stopped state of FTP server (serverstate = 4, stopped)
- Const CONST_FTPSERVER_STOPPED_STATE = 4
-
- Dim sReturnURL ' to hold return URL
- sReturnURL = "../tasks.asp"
- Call SA_MungeURL(sReturnURL, "Tab1", "TabsWelcome")
-
- ' GUID constants for the four IIS logging plug-ins. These GUIDs have been
- ' verified with the IIS WMI providers on both Win2K and .Net.
- Const CONST_MSIISLOGFILE_GUID = "{FF160657-DE82-11CF-BC0A-00AA006111E0}"
- Const CONST_NCSALOGFILE_GUID = "{FF16065F-DE82-11CF-BC0A-00AA006111E0}"
- Const CONST_ODBCLOGFILE_GUID = "{FF16065B-DE82-11CF-BC0A-00AA006111E0}"
- Const CONST_W3CEXLOGFILE_GUID = "{FF160663-DE82-11CF-BC0A-00AA006111E0}"
-
- '
- ' Upload method constants for application settings tab.
- Const UPLOADMETHOD_NEITHER = "0"
- Const UPLOADMETHOD_FPSE = "1"
- Const UPLOADMETHOD_FTP = "2"
-
-
- '-------------------------------------------------------------------------
- 'Function name: IISLogFileGUIDToENName
- 'Description: Converts the given IIS Log File Plug-in GUID into
- ' the English-US name for that plug-in as
- ' long as the GUID is one of the four we recognize.
- 'Input Variables: strGUID - The plug-in GUID.
- 'Returns: The US English name of the plug-in or an
- ' empty string if the GUID is unrecognized.
- 'Global Variables: None
- '-------------------------------------------------------------------------
- Function IISLogFileGUIDToENName(strGUID)
- Select Case strGUID
- Case CONST_MSIISLOGFILE_GUID
- IISLogFileGUIDToENName = CONST_MSIISLOGFILE_FORMAT
- Case CONST_NCSALOGFILE_GUID
- IISLogFileGUIDToENName = CONST_NCSALOGFILE_FORMAT
- Case CONST_ODBCLOGFILE_GUID
- IISLogFileGUIDToENName = CONST_ODBCLOGFILE_FORMAT
- Case CONST_W3CEXLOGFILE_GUID
- IISLogFileGUIDToENName = CONST_W3CEXLOGFILE_FORMAT
- Case Else
- IISLogFileGUIDToENName = ""
- End Select
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: IISLogFileENNameToGUID
- 'Description: Converts the given IIS Log File Plug-in US
- ' English name into the GUID for that plug-in as
- ' long as the name is one of the four we recognize.
- 'Input Variables: strName - The US English plug-in name.
- 'Returns: The GUID of the plug-in or an empty string
- ' if the name is unrecognized.
- 'Global Variables: None
- '-------------------------------------------------------------------------
- Function IISLogFileENNameToGUID(strName)
- Select Case strName
- Case CONST_MSIISLOGFILE_FORMAT
- IISLogFileENNameToGUID = CONST_MSIISLOGFILE_GUID
- Case CONST_NCSALOGFILE_FORMAT
- IISLogFileENNameToGUID = CONST_NCSALOGFILE_GUID
- Case CONST_ODBCLOGFILE_FORMAT
- IISLogFileENNameToGUID = CONST_ODBCLOGFILE_GUID
- Case CONST_W3CEXLOGFILE_FORMAT
- IISLogFileENNameToGUID = CONST_W3CEXLOGFILE_GUID
- Case Else
- IISLogFileENNameToGUID = ""
- End Select
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: CreateOU
- 'Description: Creates the ou under specified parent ou
- 'Input Variables: strOuName - ou name
- ' objParent - parent of ou to be created
- 'Output Variables: objOu - created ou
- 'Returns: returns Error Message
- 'Global Variables: None
- '-------------------------------------------------------------------------
- Function CreateOU(strOuName, strDesc, objRoot, ByRef objOu)
- On Error Resume Next
- Err.clear
-
- Set objOu = objRoot.Create("organizationalUnit", "ou=" & strOuName)
- objOu.Put "Description", strDesc
- objOu.SetInfo
-
- CreateOU = err.number
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: getObjSiteCollection
- 'Description: Returns an Instance of IIs_WebServerSetting
- 'Input Variables: None
- 'Output Variables:
- 'Returns: Object -Returns an object
- 'Global Variables: None
- 'If object fails dislays the error message
- '-------------------------------------------------------------------------
- Function getObjSiteCollection(objService)
- Err.Clear
- On Error Resume Next
-
- Dim siteCollection 'holds sitecollection
- Dim strQuery 'holds query string
-
- 'form the query
- strQuery = "select * from " & GetIISWMIProviderClassName("IIs_WebServerSetting")
-
- Set siteCollection = objService.ExecQuery(strQuery)
-
- If Err.number <> 0 Then
- SA_ServeFailurepageEx L_INFORMATION_ERRORMESSAGE, sReturnURL
- getObjSiteCollection = false
- exit function
- End If
-
- Set getObjSiteCollection = siteCollection
-
- End function
-
- '-------------------------------------------------------------------------
- 'Function name: CreateManagedSiteRegKey
- 'Description: Creates the reg key for this site under SOFTWARE\
- ' Microsoft\WebServerAppliance\ManagedWebSites
- 'Input Variables: nSiteNo, strSiteID
- 'Output Variables:
- 'Returns: None
- 'Global Variables: None
- '-------------------------------------------------------------------------
- Function MakeManagedSite(objService, strSiteNum,servercomment)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds object path
- Dim objVirDir 'holds virtualdirectory collection
-
- MakeManagedSite = false
-
- 'set ServerID
- strObjPath = GetIISWMIProviderClassName("IIs_WebServerSetting") & ".Name=" & chr(34) & strSiteNum & chr(34)
-
- set objVirDir = objService.Get( strObjPath )
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "get vir dir object failed " & Hex(Err.Number)
- exit Function
- End if
-
- 'call the method to set serverID property
- objVirDir.serverID = servercomment
-
- objVirDir.put_(WBEMFLAG)
-
- if Err.number <> 0 then
- SA_TraceOut "Make Managed Site", "Failed to set ServerID" & "(" & Hex(Err.Number) & ")"
- Set objVirDir = nothing
- exit function
- end if
- MakeManagedSite = true
-
- Set objVirDir = nothing
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name :isValidSiteIdentifier
- 'Description :Returns an Instance of IIs_WebServerSetting
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Object -Returns an object
- 'Global Variables :None
- 'If object fails dislays the error message
- '-------------------------------------------------------------------------
- Function isValidSiteIdentifier(strSiteID, _
- strAdminName, _
- strDirRoot, _
- bVerifyUser)
- Err.Clear
- On Error Resume Next
-
- isValidSiteIdentifier = FALSE
-
- 'verify the siteid
- If CStr(GetWebSiteNo(strSiteID)) <> "" Then
- SA_TraceOut "inc_wsa", "Failed: isValidSiteIdentifier"
- Exit Function
- End If
-
- 'verify the administrator
- If bVerifyUser Then
- If isValidUser(strAdminName, strDirRoot) = FALSE Then
- SA_TraceOut "inc_wsa", "Failed: isValidSiteIdentifier"
- Exit Function
- End If
- End If
-
- isValidSiteIdentifier = TRUE
- SA_TraceOut "inc_wsa", "success isValidSiteIdentifier"
- End function
-
-
- '-------------------------------------------------------------------------
- 'Function name :isValidUser
- 'Description :Returns an Instance of IIs_WebServerSetting
- 'Input Variables :None
- 'Output Variables :
- 'Returns :Object -Returns an object
- 'Global Variables :None
- 'If object fails dislays the error message
- '-------------------------------------------------------------------------
- Function isValidUser(strUserName, strDirRoot)
- On Error Resume Next
- Err.Clear
-
- Dim objComputer 'holds Computer object
- Dim objUser
-
- isValidUser = False
- Set objComputer = GetObject("WinNT://" & strDirRoot)
- Set objUser = objComputer.GetObject("User",strUserName)
-
- If Err.number <> 0 Then
- isValidUser = True
- Set objComputer = nothing
- Exit Function
- End If
-
- Set objComputer = nothing
- Set objUser = nothing
- End function
-
-
- '-------------------------------------------------------------------------
- 'Function name :GetNewSiteNo
- 'Description :Returns an Free Site no
- 'Input Variables :None
- 'Output Variables :
- 'Returns :siteno
- 'Global Variables :None
- 'If object fails dislays the error message
- '-------------------------------------------------------------------------
- Function GetNewSiteNo()
- On Error Resume Next
- Err.Clear
-
- Dim objService 'holds WMI Connection
- Dim objInstances 'holds WebServer Instance
- Dim objInstance 'holds instance object
- Dim nSiteNo 'holds sitenumber value
- Dim nPos 'holds position value
- Dim nCount 'holds count value
- Dim index 'holds index value
- Dim nStart 'holds start value
- Dim bFound 'holds boolean value
- Dim arrSiteNo 'holsd arraysite number
-
- GetNewSiteNo = -1
-
- Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set objInstances = objService.InstancesOf(GetIISWMIProviderClassName("IIS_WebServer"))
-
- nCount = objInstances.Count
-
- 'store the existing site no. in the array
- ReDim arrSiteNo(nCount)
-
- For Each objInstance In objInstances
- nPos = InStr(objInstance.Name, "/")
- arrSiteNo(nStart) = Right(objInstance.Name, len(objInstance.Name) - nPos)
- nStart = nStart + 1
- Next
-
- nCount = Ubound(arrSiteNo) - 1
- nSiteNo = 1
- bFound = FALSE
- Do While bFound <> TRUE
- For index= 0 to nCount
- If Clng(nSiteNo) = Clng(arrSiteNo(index)) Then
- Exit For
- End If
- Next
-
- If index > nCount Then
- bFound = TRUE
- Else
- nSiteNo = nSiteNo + 1
- End If
- Loop
-
- SA_TraceOut "inc_wsa", "SiteNo=" & nSiteNo
-
- GetNewSiteNo = nSiteNo
- Set objService = nothing
- Set objInstances = nothing
- End function
-
-
- '-------------------------------------------------------------------------
- 'Sub name :GetDomainRole
- 'Description :Returns domain and server name of local machine
- 'Input Variables :None
- 'Output Variables :strDirectoryRoot, strSysName
- 'Returns :None
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Sub GetDomainRole(ByRef strDirectoryRoot, ByRef strSysName)
- On Error Resume Next
- Err.Clear
-
- Dim strDomainName 'holds Domain name
- Dim Query 'holds query string
- Dim objService 'holds WMI connection
- Dim Parent 'holds result query
- Dim role 'holds role of the sytem
- Dim Domain 'holds domain name
- Dim inst 'holds instance of computer object
-
- strDomainName = ""
- strSysName = ""
-
- Query = "Select * from Win32_ComputerSystem"
- Set objService = getWMIConnection("root\cimv2")
-
- set Parent = objService.ExecQuery(Query)
- If Err.number <> 0 Then
- SA_TraceOut "Failed to get connection to Computer name space"
- Exit Sub
- End if
-
- For each inst in Parent
- role = inst.DomainRole
- strDomainName = inst.Domain
- strSysName = inst.Name
- exit for
- next
-
- If (role = MEMBER_DOMAIN) Then
- strDirectoryRoot = strDomainName
- ElseIf (role = MEMBER_WORKGROUP) Then
- strDirectoryRoot = strSysName
- End If
- End Sub
-
- '-------------------------------------------------------------------------
- 'Function name: GetWebSiteNo
- 'Description: gets the web site no
- 'Input Variables: strSiteId - site identifier
- ' strSysName - system name
- 'Returns: strSiteNo
- '--------------------------------------------------------------------------
- Function GetWebSiteNo(strSiteId)
- On Error Resume Next
- Err.Clear
-
- Dim Parent 'holds result collection
- Dim Query 'holds query string
- Dim inst 'holds instance or result collection
- Dim strSiteNo 'holds site name
- Dim objService 'holds WMI Connection object
-
- Query = "select * from " & GetIISWMIProviderClassName("IIs_WebServerSetting") & " where ServerID=" & chr(34) & strSiteId & chr(34)
-
- Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set Parent = objService.ExecQuery(Query)
- If Err.number <> 0 Then
- SA_TraceOut "Failed to get the IIs_WebServerSetting object with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- End if
-
- For Each inst In Parent
- strSiteNo = inst.Name
- Exit For
- Next
-
- GetWebSiteNo = strSiteNo
-
- Set Parent = nothing
- Set objService = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: GetWebSiteName
- 'Description: gets the web site no
- 'Input Variables: strSiteId - site identifier
- 'Returns: strSiteNo
- '--------------------------------------------------------------------------
- Function GetWebSiteName(strSiteId)
- On Error Resume Next
- Err.Clear
-
- Dim Parent 'holds result query
- Dim Query 'holds query string
- Dim inst 'holds instance of Parent
- Dim strSiteName 'holds sitename
- Dim objService 'holds WMI Connection object
-
- Query = GetIISWMIProviderClassName("IIs_WebServerSetting") & ".Name=" & chr(34) & strSiteId & chr(34)
-
- Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set Parent = objService.Get( Query )
-
- If Err.number <> 0 Then
- SA_TraceOut "Failed to get the IIs_WebServerSetting object with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- End if
-
- strSiteName = Parent.ServerComment
-
- GetWebSiteName = strSiteName
-
- 'Release objects
- Set Parent = nothing
- Set objService = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: SetApplProt
- 'Description: Sets Application Protection level
- 'Input Variables: objService, strSiteNum, strProtect
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function SetApplProt( objService, strSiteNum, strProtect )
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds Query string
- Dim objVirDir 'holds query result
-
- SetApplProt = FALSE
-
- 'set application protection
- strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDir") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
-
- set objVirDir = objService.Get( strObjPath )
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "get vir dir object failed " & Hex(Err.Number)
- exit Function
- End if
-
- 'call the method to set the application protection
- objVirDir.AppCreate2( cint(strProtect) )
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to set the application protection " & Hex(Err.number)
- exit Function
- End if
-
- SetApplProt = TRUE
-
- 'Release objects
- set objVirDir = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: SetApplRead
- 'Description: Sets Read permissions on the web site
- 'Input Variables: objService, strSiteNum
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function SetApplRead( objService, strSiteNum)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds Query string
- Dim objVirDir 'holds query result
-
- SetApplRead = FALSE
-
- 'set application protection
- strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
-
- set objVirDir = objService.Get( strObjPath )
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "get vir dir object failed " & Hex(Err.Number)
- exit Function
- End if
-
- 'call the method to set the application Read property
- objVirDir.AccessRead = true
- objVirDir.AccessNoRemoteRead = false
- objVirDir.AccessSource = false
- objVirDir.Put_( WBEMFLAG )
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to set the application read property " & Hex(Err.number)
- exit Function
- End if
-
- SetApplRead = TRUE
-
- 'Release objects
- set objVirDir = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: SetAnonProp
- 'Description: Sets the Anon user
- 'Input Variables: objService, strSiteNum, strAllow, strAnonName, strAnonPwd
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function SetAnonProp(objService, strSiteNum, strAllow, strAnonName, strAnonPwd, bIIS)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds Query string
- Dim objVirDirSet 'holds query result
- Dim strPassword
- Dim strUserName
- Dim objSystem
- Dim strDomainName
-
- Dim arrDomain
-
- SA_Traceout "parameters=", strSiteNum + ":" + strAllow + ":" + strAnonName + ":" + strAnonPwd
-
- SetAnonProp = FALSE
-
- strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
- set objVirDirSet = objService.Get(strObjPath)
-
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Get WebVirtualDirSetting object failed with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- End if
-
- 'Set bIIS to false, that's because a new IIS 6.0 security feature, which does not
- 'install sub-authenticator on clean installs. bIIS should always be false.
- 'It also affects anon access. Now we don't let IIS manage the pwd, and have to set
- 'the pwd explicitly. Since user can disable/enable the anon access back and forth,
- 'we need to always store the pwd in AnonymousUserPass. The pwd for anon user created
- 'by WebUI is randomly generated from SAHelper, it should not be empty. If it's empty,
- 'it means user wants to change the anon access permission.
- bIIS = false
-
- If strAnonPwd <> "" Then
- objVirDirSet.AnonymousUserPass = strAnonPwd
- End If
-
- if lcase(strAllow) = "true" then
- objVirDirSet.AuthAnonymous = True
- objVirDirSet.AuthBasic = False
- objVirDirSet.AuthNTLM = True
- objVirDirSet.AnonymousUserName = strAnonName
- objVirDirSet.AnonymousPasswordSync = False
-
- else
- objVirDirSet.AuthAnonymous = False
- objVirDirSet.AuthBasic = True
- objVirDirSet.AuthNTLM = True
- end if
-
- objVirDirSet.Put_( WBEMFLAG )
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "failed to set the anon settings with error " & "(" & Hex(Err.Number) & ")"
- end if
-
- SetAnonProp = TRUE
-
- 'Release objects
- set objVirDirSet = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: SetServerBindings
- 'Description: Sets the IP address, tcp port and host header values
- 'Input Variables: objService, strSiteNum, arrBindings
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function SetServerBindings( objService, strSiteNum, arrBindings )
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds query string
- Dim objSite 'holds site
-
- SetServerBindings = FALSE
-
- strObjPath = GetIISWMIProviderClassName("IIs_WebServerSetting") & ".Name=" & chr(34) & strSiteNum & chr(34)
-
- set objSite = objService.Get(strObjPath)
-
- If Err.number <> 0 Then
- SA_TraceOut "Failed to get the IIs_WebServerSetting object with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- End if
-
- SA_TraceOut "inc_wsa", "bindings=" & arrBindings(0)
-
- If IsIIS60Installed() Then
-
- Dim arrTmp
- Dim arrObjBindings(0)
-
- 'We need to create a ServerBinding object for IIS6.0 WMI
- arrTmp = split( arrBindings(0),":")
-
- set arrObjBindings(0) = objService.Get("ServerBinding").SpawnInstance_
-
- arrObjBindings(0).IP = arrTmp(0) 'IP Address
- arrObjBindings(0).Port = arrTmp(1) 'Port
- arrObjBindings(0).Hostname = arrTmp(2) 'Hostname - Header in old WMI
-
- objSite.ServerBindings = arrObjBindings
- Else
- objSite.ServerBindings = arrBindings
- End If
-
-
- objSite.Put_( WBEMFLAG )
-
- If Err.number <> 0 Then
- SA_TraceOut "Failed to set the serverbindings with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- end if
-
- SetServerBindings = TRUE
-
- 'Release objects
- set objSite = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: StartWebSite
- 'Description: Starts web site after creation
- 'Input Variables: objService, strSiteNum
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function StartWebSite( objService, strSiteNum )
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds query string
- Dim objWebSite 'holds result site object
-
- StartWebSite = FALSE
-
- strObjPath = GetIISWMIProviderClassName("IIs_WebServer") & ".Name=" & chr(34) & strSiteNum & chr(34)
-
- Set objWebSite = objService.Get(strObjPath)
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to get the IIs_WebServer Object with error " & strObjPath & "(" & Hex(Err.Number) & ")" & Err.Description
- exit Function
- End if
-
- if objWebSite.ServerState = CONST_SITE_STOPPED then
- objWebSite.start()
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to start the IIs_WebServer Object with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- end if
- elseif objWebSite.ServerState = CONST_SITE_PAUSED then
- objWebSite.Continue()
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to start the IIs_WebServer Object with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- end if
- end if
-
- StartWebSite = TRUE
-
- 'Release objects
- Set objWebSite = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: PauseWebSite
- 'Description: Pause web site
- 'Input Variables: objService, strSiteNum
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function PauseWebSite( objService, strSiteNum )
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds query string
- Dim objWebSite 'holds result site object
-
- PauseWebSite = FALSE
-
- strObjPath = GetIISWMIProviderClassName("IIs_WebServer") & ".Name=" & chr(34) & strSiteNum & chr(34)
-
- Set objWebSite = objService.Get(strObjPath)
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to get the IIs_WebServer Object with error " & strObjPath & "(" & Hex(Err.Number) & ")" & Err.Description
- exit Function
- End if
-
- if objWebSite.ServerState = CONST_SITE_STARTED then
- objWebSite.pause()
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to pause the IIs_WebServer Object with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- end if
-
- end if
-
- PauseWebSite = TRUE
-
- 'Release objects
- Set objWebSite = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: StopWebSite
- 'Description: Starts web site after creation
- 'Input Variables: objService, strSiteNum
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function StopWebSite( objService, strSiteNum )
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds query object
- Dim objWebSite 'holds query result
-
- StopWebSite = FALSE
-
- strObjPath = GetIISWMIProviderClassName("IIs_WebServer") & ".Name=" & chr(34) & strSiteNum & chr(34)
-
- Set objWebSite = objService.Get(strObjPath)
-
- If Err.number <> 0 Then
- SA_TraceOut "site_area.asp", "Failed to get the IIs_WebServer Object with error " & strObjPath & "(" & Hex(Err.Number) & ")" & Err.Description
- exit Function
- End if
-
- if objWebSite.ServerState = CONST_SITE_STARTED or objWebSite.ServerState = CONST_SITE_PAUSED then
-
- objWebSite.Stop()
- If Err.number <> 0 Then
- SA_TraceOut "site_area.asp", "Failed to stop the IIs_WebServer Object with error " & "(" & Hex(Err.Number) & ")"
- exit Function
- end if
-
- end if
-
- StopWebSite = TRUE
-
- 'Release objects
- Set objWebSite = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: SA_Sleep
- 'Description: Sleep for the given period of time (ms)
- 'Input Variables: Time to sleep in ms
- 'Output Variables:
- 'Returns: None
- 'Global Variables:
- '-------------------------------------------------------------------------
- Public Function SA_Sleep(lngTimeToSleep)
- On Error Resume Next
- Dim objSystem
-
- Set objSystem = CreateObject("comhelper.SystemSetting")
- If Err.Number <> 0 Then
- Call SA_TraceOut(SA_GetScriptFileName(), "SA_Sleep failed to create COMHelper object: " + CStr(Hex(Err.Number)))
- Set objSystem = Nothing
- Exit Function
- End If
-
- call objSystem.Sleep(lngTimeToSleep)
-
- If Err.Number <> 0 Then
- Call SA_TraceOut(SA_GetScriptFileName(), "SA_Sleep failed: " + CStr(Hex(Err.Number)))
- Set objSystem = Nothing
- Exit Function
- End If
-
- Set objSystem = Nothing
-
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: SetAdminFtpServerName
- 'Description: sets the ftp site name in registry
- 'Input Variables: strFTPServerName
- 'Returns: true/false
- 'Global variables: None
- '--------------------------------------------------------------------------
-
- Function SetAdminFtpServerName(strFTPServerName)
- on error resume next
- Err.clear
-
- Dim IRC
- Dim objGetHandle
-
- SetAdminFtpServerName = FALSE
-
- set objGetHandle = RegConnection()
-
- IRC = objGetHandle.SetStringValue(G_HKEY_LOCAL_MACHINE,CONST_WEBBLADES_REGKEY,CONST_FTPSITEID_REGVAL,strFTPServerName)
- If Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to Set adminFTPServerName regval"
- exit function
- end if
-
- SetAdminFtpServerName = TRUE
-
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: GetAdminFtpServerName
- 'Description: gets the ftp site id
- 'Input Variables: None
- 'Output Variables: none
- 'Returns: FTP site ID
- '--------------------------------------------------------------------------
- Function GetAdminFtpServerName()
- On Error Resume Next
- Err.Clear
-
- Dim objGetHandle 'holds regconnection value
-
- set objGetHandle = RegConnection()
-
- GetAdminFtpServerName = GetRegKeyValue(objGetHandle,CONST_WEBBLADES_REGKEY,CONST_FTPSITEID_REGVAL,CONST_STRING)
- If Err.number <> 0 then
- GetAdminFtpServerName = ""
- SA_TraceOut "inc_wsa", "Failed to get AdminFtpServerName regval"
- exit function
- end if
-
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: IsAdminFTPServerExist
- 'Description: check whether AdminFTPServer exists
- 'Input Variables: None
- 'Output Variables: none
- 'Returns: true/false
- '--------------------------------------------------------------------------
- Function IsAdminFTPServerExist()
- On Error Resume Next
- Err.Clear
-
- dim strAdminFTPServerName
- dim objWMIConnection
- dim objAdminFTPServer
-
- IsAdminFTPServerExist = false
-
- strAdminFTPServerName = GetAdminFtpServerName()
- ' If could not read the admin FTP server name from the registry, return false
- if strAdminFTPServerName = "" Then
- Exit Function
- End if
-
- ' If could not get admin FTP server from WMI, return false
- set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
-
- if Err.number <> 0 or (Not IsObject(objAdminFTPServer)) Then
- SA_TraceOut "inc_wsa", "IsAdminFTPServerExist failed"
- Exit Function
- End If
-
- IsAdminFTPServerExist = true
-
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: IsAdminFTPServerExistAndRunning
- 'Description: check whether AdminFTPServer exists and is running
- 'Input Variables: None
- 'Output Variables: none
- 'Returns: true/false
- '--------------------------------------------------------------------------
- Function IsAdminFTPServerExistAndRunning()
- On Error Resume Next
- Err.Clear
-
- dim strAdminFTPServerName
- dim objWMIConnection
- dim objAdminFTPServer
-
- IsAdminFTPServerExistAndRunning = false
-
- strAdminFTPServerName = GetAdminFtpServerName()
- ' If could not read the admin FTP server name from the registry, return false
- if strAdminFTPServerName = "" Then
- Exit Function
- End if
-
- ' If could not get admin FTP server from WMI, return false
- set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
-
- if Err.number <> 0 or (Not IsObject(objAdminFTPServer)) Then
- SA_TraceOut "inc_wsa", "IsAdminFTPServerExistAndRunning failed"
- Exit Function
- End If
-
- ' If admin FTP server is not running, return false
- if objAdminFTPServer.ServerState <> CONST_FTPSERVER_RUNNING_STATE Then
- SA_TraceOut "inc_wsa", "AdminFTPServer is not running"
- exit function
- End if
-
- IsAdminFTPServerExistAndRunning = true
-
- End Function
-
-
-
- '-------------------------------------------------------------------------
- 'Function name: IsAdminFTPServerExist
- 'Description: check whether AdminFTPServer exists
- 'Input Variables: None
- 'Output Variables: none
- 'Returns: true/false
- '--------------------------------------------------------------------------
- Function IsAdminFTPServerExist()
- On Error Resume Next
- Err.Clear
-
- dim strAdminFTPServerName
- dim objWMIConnection
- dim objAdminFTPServer
-
- IsAdminFTPServerExist = false
-
- strAdminFTPServerName = GetAdminFtpServerName()
- ' If could not read the admin FTP server name from the registry, return false
- if strAdminFTPServerName = "" Then
- Exit Function
- End if
-
- ' If could not get admin FTP server from WMI, return false
- set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
-
- if Err.number <> 0 or (Not IsObject(objAdminFTPServer)) Then
- SA_TraceOut "inc_wsa", "IsAdminFTPServerExist fails"
- Exit Function
- End If
-
- IsAdminFTPServerExist = true
-
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name: StartAdminFTPServer
- 'Description: Start Admin FTP Server
- 'Input Variables: None
- 'Output Variables: none
- 'Returns: true/false
- '--------------------------------------------------------------------------
- Function StartAdminFTPServer()
- On Error Resume Next
- Err.Clear
-
- dim strAdminFTPServerName
- dim objWMIConnection
- dim objAdminFTPServer
-
- StartAdminFTPServer = false
-
- strAdminFTPServerName = GetAdminFtpServerName()
- ' If could not read the admin FTP server name from the registry, return false
- if strAdminFTPServerName = "" Then
- Exit Function
- End if
-
- ' If could not get admin FTP server from WMI, return false
- set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
-
- if objAdminFTPServer.ServerState <> CONST_FTPSERVER_RUNNING_STATE Then
- objAdminFTPServer.Start
- Else
- SA_TraceOut "inc_wsa", "Admin FTP Server is already started"
- End if
-
- if Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "StartAdminFTPServer failed: " & err.Description
- Exit Function
- End If
-
- StartAdminFTPServer = true
-
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name: StopAdminFTPServer
- 'Description: Stop Admin FTP Server
- 'Input Variables: None
- 'Output Variables: none
- 'Returns: true/false
- '--------------------------------------------------------------------------
- Function StopAdminFTPServer()
- On Error Resume Next
- Err.Clear
-
- dim strAdminFTPServerName
- dim objWMIConnection
- dim objAdminFTPServer
-
- StopAdminFTPServer = false
-
- strAdminFTPServerName = GetAdminFtpServerName()
- ' If could not read the admin FTP server name from the registry, return false
- if strAdminFTPServerName = "" Then
- Exit Function
- End if
-
- ' If could not get admin FTP server from WMI, return false
- set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set objAdminFTPServer = objWMIConnection.Get("IIsFtpServer.Name='" & strAdminFTPServerName & "'")
-
- if objAdminFTPServer.ServerState = CONST_FTPSERVER_RUNNING_STATE Then
- objAdminFTPServer.Stop
- Else
- SA_TraceOut "inc_wsa", "Admin FTP Server is already stopped"
- End if
-
- if Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "StopAdminFTPServer failed"
- Exit Function
- End If
-
- StopAdminFTPServer = true
-
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name: StopDefaultFTPServer
- 'Description: Before starting admin FTP server, we need try to stop
- ' the default FTP server. If it cannot be stopped, or the
- ' the running FTP server is not the default FTP server (nor
- ' the admin FTP server), return false. Return true otherwise.
- 'Input Variables: None
- 'Output Variables: none
- 'Returns: true/false
- '--------------------------------------------------------------------------
- Function StopDefaultFTPServer()
- On Error Resume Next
- Err.Clear
-
- dim objWMIConnection
- dim objFTPServers
- dim instFTPServer
- Const TIME_TO_SLEEP = 500 ' Sleep 1/2 second
-
- StopDefaultFTPServer = false
-
- set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- Set objFTPServers = objWMIConnection.InstancesOf(GetIISWMIProviderClassName("IIsFtpServer"))
-
- if Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Fail to stop Default FTP Server:" & err.number
- exit function
- end if
-
- if objFTPServers.count = 0 then
- ' If there is not FTP site, return true
- StopDefaultFTPServer = true
- exit function
- End If
-
- for each instFTPServer in objFTPServers
-
- 'If running site is not default FTP site, return false since we don't want
- 'to stop any FTP site other than the default FTP site
- if instFTPServer.ServerState = CONST_FTPSERVER_RUNNING_STATE And instFTPServer.Name <> "MSFTPSVC/1" Then
- exit function
- End If
-
- 'If it's default site, stop it if it's running
- if instFTPServer.Name = "MSFTPSVC/1" Then
- if instFTPServer.ServerState <> CONST_FTPSERVER_RUNNING_STATE Then
- StopDefaultFTPServer = true
- Exit Function
- Else
-
- instFTPServer.Stop
-
- Dim iCounter
-
- For iCounter = 0 to 10 'loop for 10 times
-
- 'Requery the WMI for the state of the default FTP server
- Set instFTPServer = objWMIConnection.Get("IIsFtpServer.Name='MSFTPSVC/1'")
-
- If instFTPServer.ServerState = CONST_FTPSERVER_STOPPED_STATE Then
- StopDefaultFTPServer = true
- Exit Function
- Else
- call SA_Sleep(TIME_TO_SLEEP)
- End If
- Next
-
- if Err.number <> 0 Then
- SA_TraceOut "inc_wsa.asp", "Failed to stop default FTP site"
- Exit Function
- End If
-
- StopDefaultFTPServer = true
- Exit Function
-
- End If
- End If
-
- Next
-
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: CreateAdminFTPServer
- 'Description: Create FTP server for Updating Website Content and save
- ' the server name to the registry
- 'Input Variables: None
- 'Output Variables: none
- 'Returns: true/false
- '--------------------------------------------------------------------------
- Function CreateAdminFTPServer()
-
- On Error Resume Next
- Err.Clear
-
- Dim strName
- Dim strRoot
- Dim strPort
- Dim objWMIConnection
- Dim Bindings
- Dim objFTPService
- Dim strSiteObjPath
- Dim strSitePath
- Dim objPath
- Dim objSetting
- Dim objSysDrive
- Dim strSysDrive
-
- CreateAdminFTPServer = false
-
- 'Get FTP site root dir
- Set objSysDrive = server.CreateObject("Scripting.FileSystemObject")
- Call GetFTPSiteRootVal(strRoot)
-
- 'If the root dir does not exist, create it
- If objSysDrive.FolderExists(strRoot)=false Then
- call CreateSitePath(objSysDrive, strRoot)
- End If
-
- strName = "Web Site Content"
- strPort = "21"
-
- set objWMIConnection = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
-
- Bindings = Array(0)
- Set Bindings(0) = objWMIConnection.get("ServerBinding").SpawnInstance_()
- Bindings(0).IP = "" 'all unsigned
- Bindings(0).Port = strPort
-
- 'Create and start the admin FTP site
- Set objFTPService = objWMIConnection.Get("IIsFtpService='MSFTPSVC'")
- strSiteObjPath = objFTPService.CreateNewSite(strName, Bindings, strRoot)
-
- If err.number <> 0 Then
- sa_traceout "inc_wsa", "Failed to create admin FTP site " & err.Description
- Exit Function
- End If
-
- ' Parse site ID out of WMI object path
- Set objPath = CreateObject("WbemScripting.SWbemObjectPath")
- objPath.Path = strSiteObjPath
- strSitePath = objPath.Keys.Item("")
-
- ' Set ftp virtual directory properties
- Set objSetting = objWMIConnection.Get("IIsFtpServerSetting.Name='" & strSitePath & "'")
-
- objSetting.AllowAnonymous = false
- objSetting.AccessRead = true
- objSetting.AccessWrite = false
- objSetting.UserIsolationMode = 0 'not using the user isolation mode
- objSetting.Put_()
-
- 'Save the admin FTP server name to registry
- call SetAdminFTPServerName(strSitePath)
-
- If err.number <> 0 Then
- sa_traceout "inc_wsa", "Failed to create admin FTP site " & err.Description
- Exit Function
- End If
-
- CreateAdminFTPServer = true
-
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: GetWebSiteRootVal
- 'Description: gets the web site root dir
- 'Input Variables: None
- 'Output Variables: strWebRootDir
- 'Returns: error num
- '--------------------------------------------------------------------------
- Function GetWebSiteRootVal(ByRef strWebRootDir)
- On Error Resume Next
- Err.Clear
-
- Dim IRC 'holds return value
- Dim objGetHandle 'holds regconnection value
-
- set objGetHandle = RegConnection()
-
- IRC = ""
- IRC = GetRegKeyValue(objGetHandle,CONST_WEBBLADES_REGKEY,CONST_WEBSITEROOT_REGVAL,CONST_STRING)
- If Err.number <> 0 then
- GetWebSiteRootVal = Err.number
- SA_TraceOut "inc_wsa", "Failed to get the web root dir val from reg"
- exit function
- end if
-
- set objGetHandle = nothing
-
- if IRC = "" then
- Dim objSysDrive,strSysDrive
- Set objSysDrive = server.CreateObject("Scripting.FileSystemObject")
- strSysDrive = objSysDrive.GetSpecialFolder(1).Drive ' 1 for systemfolder,0 for windows folder
- strWebRootDir = strSysDrive & "\" & CONST_DEF_WEBROOT
- else
- strWebRootDir = IRC
- end if
-
- set objSysDrive = nothing
-
- GetWebSiteRootVal = CONST_SUCCESS
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: GetFTPSiteRootVal
- 'Description: gets the FTP site roor dir
- 'Input Variables: None
- 'Output Variables: strWebRootDir
- 'Returns: error num
- '--------------------------------------------------------------------------
- Function GetFTPSiteRootVal(ByRef strWebRootDir)
- On Error Resume Next
- Err.Clear
-
- Dim IRC 'holds return value
- Dim objGetHandle 'holds registry connection
-
- set objGetHandle = RegConnection()
-
- IRC = ""
-
- IRC = GetRegKeyValue(objGetHandle,CONST_WEBBLADES_REGKEY,CONST_FTPSITEROOT_REGVAL,CONST_STRING)
- If Err.number <> 0 then
- ' Ignore registry error and use default value.
- IRC = ""
- end if
-
- set objGetHandle = nothing
-
- if IRC = "" then
- Dim objSysDrive,strSysDrive
-
- Set objSysDrive = server.CreateObject("Scripting.FileSystemObject")
- strSysDrive = objSysDrive.GetSpecialFolder(1).Drive ' 1 for systemfolder,0 for windows folder
- strWebRootDir = strSysDrive & "\" & CONST_DEF_FTPROOT
-
- set objSysDrive = nothing
- else
- strWebRootDir = IRC
- end if
-
- GetFTPSiteRootVal = CONST_SUCCESS
- End Function
-
- '----------------------------------------------------------------------------
- 'Function name :CreateSitePath
- 'Description :Create Directory path if not exists
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '----------------------------------------------------------------------------
- Function CreateSitePath(objFso, strRootDir)
- on error resume next
- Err.Clear
-
- Dim strIndx 'holds index value
- Dim strDriveName 'holds drive name
- Dim strDirStruct 'holds directory path
- Dim strDirList
- Dim strMain
- Dim count
- Dim strEachDir
- Dim strCreateDir
- Dim objDirList
- Dim objDir
- Dim objDriveType
-
- strIndx = instr(1,strRootDir,":\")
- strDriveName = left(strRootDir,strIndx)
- strDirStruct = mid(strRootDir,strIndx+1)
- strDirList = split(strDirStruct,"\")
-
- if NOT objFso.DriveExists(ucase(strDriveName)) then
- CreateSitePath = CONST_INVALID_DRIVE
- exit function
- end if
-
- set objDriveType = objFso.GetDrive(strDriveName)
- if objDriveType.FileSystem <> "NTFS" then
- CreateSitePath = CONST_NOTNTFS_DRIVE
- exit function
- end if
-
- for count = 0 to UBound(strDirList)
- if count>=UBound(strDirList) then exit for
- if count=0 then
- strMain = strDriveName & "\" & strDirList(count+1)
- if objFso.FolderExists(strMain)=false then
- objFso.CreateFolder(strMain)
- if err.number <> 0 then
- SA_TraceOut "inc_wsa", "CreateSitePath:Failed to create dir " & "(" & Hex(Err.Number) & ")" & Err.Description
- CreateSitePath = CONST_FAILED_TOCREATE_DIR
- Exit Function
- end if
- end if
- else
- strEachDir = strEachDir & "\" & strDirList(count+1)
- strCreateDir = strMain & strEachDir
- if objFso.FolderExists(strCreateDir)=false then
- objFso.CreateFolder(strCreateDir)
- if err.number <> 0 then
- SA_TraceOut "inc_wsa", "CreateSitePath: Failed to create directory " & "(" & Hex(Err.Number) & ")" & Err.Description
- CreateSitePath = CONST_FAILED_TOCREATE_DIR
- Exit Function
- end if
- end if
- end if
- next
-
- CreateSitePath = CONST_SUCCESS
- end function
-
-
- '----------------------------------------------------------------------------
- 'Function name :DelegateOuToSiteAdmin
- 'Description :Delegate Permissions to Site-Identifier_Admins group
- 'Input Variables :strOu, strTrustee
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '----------------------------------------------------------------------------
- Function DelegateOuToSiteAdmin(strOu, strTrustee)
- On Error Resume Next
- Err.Clear
-
- Dim strDn 'holds query value
- Dim oRootDSE 'holds root value
- Dim oDelegationOU
- Dim oSecDescriptor
- Dim oAcl
-
- DelegateOuToSiteAdmin = FALSE
-
- Set oRootDSE = GetObject("LDAP://RootDSE")
-
- strDn = "ou=" & strOu & ",ou=WebSites," & oRootDSE.Get("DefaultNamingContext")
-
- SA_TraceOut "inc_wsa", "strDn=" & strDn
-
- ' Get the security descriptor from the object
- Set oDelegationOU = GetObject("LDAP://" & strDN)
-
- Set oSecDescriptor = oDelegationOU.Get("ntSecurityDescriptor")
- Set oAcl = oSecDescriptor.DiscretionaryAcl
-
- 'Give ability to read this object
- ' Grant a Read permission
- ' Allow Ace
- ' Apply to this object only
- ' ObjectType is not present
- ' No specific class
- ' No children will inherit
-
- if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_GENERIC_READ, ADS_ACETYPE_ACCESS_ALLOWED, 0, 0, "", "" ) then
- SA_TraceOut "inc_wsa", "AddAceToAcl failed "
- exit function
- end if
-
- 'Give ability to create and delete users
- ' Allow create and delete right
- ' Allow object ace, This applies to this object and children
- ' ObjectType is present
- ' Applies to User object
- ' No children will inherit
- if NOT AddAceToAcl (oAcl, strTrustee, ADS_RIGHT_DS_CREATE_CHILD OR ADS_RIGHT_DS_DELETE_CHILD, _
- ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, ADS_ACEFLAG_INHERIT_ACE, _
- ADS_FLAG_OBJECT_TYPE_PRESENT, USERGUID, "" ) then
-
- SA_TraceOut "inc_wsa", "AddAceToAcl failed "
- exit function
-
- end if
-
- 'Give full control over user objects
- ' Grant full control
- ' Allow Ace for an object
- ' This should be applied only to children, not to this object
- ' ObjectType is present
- ' Applies to User class
- ' No children will inherit
-
- if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_GENERIC_ALL, ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, _
- ADS_ACEFLAG_INHERIT_ACE Or ADS_ACEFLAG_INHERIT_ONLY_ACE, _
- ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, "", USERGUID ) then
-
- SA_TraceOut "inc_wsa", "AddAceToAcl failed "
- exit function
-
- end if
-
- 'Give ablity to read this OU
- ' Grant a Read
- ' Allow Ace
- ' Apply to this object only
- ' ObjectType is present
- ' This applies to the OU class
- ' No children will inherit
- if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_GENERIC_READ, ADS_ACETYPE_ACCESS_ALLOWED, _
- 0, ADS_FLAG_OBJECT_TYPE_PRESENT, OUGUID, "" ) then
-
- SA_TraceOut "inc_wsa", "AddAceToAcl failed "
- exit function
-
- end if
-
- 'Give ability to create and delete group objects
- ' Allow create and delete right
- ' Allow object ace
- ' This applies to this object only
- ' ObjectType is present
- ' Applies to group object
- ' No children will inherit an objectAce
-
- if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_DS_CREATE_CHILD OR ADS_RIGHT_DS_DELETE_CHILD, _
- ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, ADS_ACEFLAG_INHERIT_ACE, _
- ADS_FLAG_OBJECT_TYPE_PRESENT, GROUPGUID, "" ) then
-
- SA_TraceOut "inc_wsa", "AddAceToAcl failed "
- exit function
-
- end if
-
- 'Give full control to group objects
- ' Grant full control
- ' Allow Ace for an object
- ' This should be applied only to children, not to this object
- ' ObjectType is present
- ' Applies to group object
- ' No children will inherit an objectAce
-
- if NOT AddAceToAcl ( oAcl, strTrustee, ADS_RIGHT_GENERIC_ALL, ADS_ACETYPE_ACCESS_ALLOWED_OBJECT, _
- ADS_ACEFLAG_INHERIT_ACE Or ADS_ACEFLAG_INHERIT_ONLY_ACE, _
- ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, "", GROUPGUID ) then
-
- SA_TraceOut "inc_wsa", "AddAceToAcl failed "
- exit function
-
- end if
-
-
- 'Commit all of the changes to the Active Directory
-
- oSecDescriptor.DiscretionaryAcl = oAcl
- oDelegationOU.Put "ntSecurityDescriptor", oSecDescriptor
- oDelegationOU.SetInfo
- if Err.Number <> 0 then
- Exit Function
- end if
-
- DelegateOuToSiteAdmin = TRUE
-
- End Function
-
-
-
- '=========================================================================================================================
- ' The AddAceToAcl function will create a new Access control entry. It will set the trustee to the global trustee variable
- ' passed into the script. The other attibutes of the ACE are determined by the parameters. The ACE is added to the
- ' global oACL variable.
- '=========================================================================================================================
- Function AddAceToAcl(oAcl, strTrustee, iAccessMask, iAceType, iAceFlags, iFlags, strObjectGUID, strInheritGUID)
- On Error Resume Next
- Err.Clear
-
- Dim oAce 'As IADsAccessControlEntry
-
- AddAceToAcl = FALSE
-
- set oAce = CreateObject("AccessControlEntry")
-
- if Err.Number <> 0 then
- SA_TraceOut "inc_wsa", "CreateObject AccessControlEntry failed " & "(" & Hex(Err.Number) & ")"
- Exit Function
- end if
-
- oAce.Trustee = strTrustee
- oAce.AccessMask = iAccessMask
- oAce.AceType = iAceType
- oAce.Flags = iFlags
- oAce.AceFlags = iAceFlags
- If Len(strObjectGUID) > 0 then
- oAce.ObjectType = strObjectGUID
- End If
- If Len(strInheritGUID) > 0 then
- oAce.InheritedObjectType = strInheritGUID
- End If
-
- oACL.AddAce oAce
- if Err.Number <> 0 then
- SA_TraceOut "inc_wsa", "Add ace to acl failed " & "(" & Hex(Err.Number) & ")"
- Exit Function
- end if
-
- AddAceToAcl = TRUE
- Set oAce = nothing
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name :GetNonInheritedSites
- 'Description :Gets all sites that are not Inheriting settings from the master
- 'Input Variables :objService,strClassName,strMasterClassName,arrProp
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function GetNonInheritedSites(objService,strClassName,strMasterClassName,arrProp)
- On Error Resume Next
- Err.Clear
-
- Dim strQuery 'holds query string
- Dim objInstances 'holds instance values
- Dim objInst
- Dim count
- Dim strPropCollection 'holds prop collection
- Dim arrMasterPropVal
- Dim strTemp
- Dim arrWebSites 'holds array of web sites
- Dim strManagedSites 'holds managed websites value
- Dim managedCount 'holds managed count value
-
- redim arrMasterPropVal(ubound(arrProp))
-
- if strClassName = GetIISWMIProviderClassName("IIS_FTPServerSetting") then
- arrWebSites = getManagedFTPSites
- else
- arrWebSites = getManagedWebSites
- end if
-
- if arrWebSites = 0 then
- GetNonInheritedSites = 0
- exit function
- end if
-
- for count =0 to UBound(arrProp)
- strPropCollection = strPropCollection & arrProp(count) & ","
- next
-
- strPropCollection = left(strPropCollection,len(strPropCollection)-1)
-
- strQuery = "select " & strPropCollection & " from " & strMasterClassName
-
- set objInstances = objService.ExecQuery(strQuery)
-
- for each objInst in objInstances
-
- for count = 0 to UBound(arrProp)
- if vartype(objInst.Properties_.Item(arrProp(count))) = 11 then '11 for boolean
- 'if the property type is boolean, we cannot convert it to a string directly
- 'string conversion of vbscript is browser preference dependent
- 'we need to convert boolean to english strings(true/false), otherwise wmi query fails
- if objInst.Properties_.Item(arrProp(count)) then
- arrMasterPropVal(count) = "'" & "True" & "'"
- else
- arrMasterPropVal(count) = "'" & "False" & "'"
- end if
- elseif vartype(objInst.Properties_.Item(arrProp(count))) = 8 then '8 for string
- arrMasterPropVal(count) = "'" & objInst.Properties_.Item(arrProp(count)) & "'"
-
- elseif vartype(objInst.Properties_.Item(arrProp(count))) = 3 then '3 for integer
- arrMasterPropVal(count) = objInst.Properties_.Item(arrProp(count))
-
- end if
-
- next
-
- next
-
- 'Release objects
- set objInstances = nothing
-
- for count = 0 to UBound(arrProp)
- strTemp = strTemp & arrProp(count) & " !=" & arrMasterPropVal(count) & " or "
- next
-
- strTemp = left(strTemp,len(strTemp)-3)
-
- strTemp = " ( " & strTemp & " ) "
-
- for managedCount = 0 to UBound(arrWebSites)
- if strClassName = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") then
- strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "/Root' and " & strTemp & " or "
- else
- strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "' and " & strTemp & " or "
- end if
- next
- strManagedSites = left(strManagedSites,len(strManagedSites)-3)
- strQuery = "select * from " & strClassName & " where " & strManagedSites
-
- set objInstances = objService.ExecQuery(strQuery)
- set GetNonInheritedSites = objInstances
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: getManagedWebSites
- 'Description: Returns an array of Managed web sites from reg loc
- ' WebServerAppliance\ManagedWebSites
- 'Input Variables: None
- 'Output Variables:
- 'Returns: returns an array
- 'Global Variables: None
- 'If object fails dislays the error message
- '-------------------------------------------------------------------------
- Function getManagedWebSites()
- On Error Resume Next
- Err.Clear
-
- Dim Child 'hold child object
- Dim count
- Dim arrWebSites() 'hold array of websites
- Dim objService 'hold WMI Connection object
- Dim siteCollection 'hold site collection
- Dim strQuery 'hold query string
-
- Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
-
- 'form the query
- strQuery = "select * from " & GetIISWMIProviderClassName("IIs_WebServerSetting") & " where ServerID = ServerComment"
-
- Set siteCollection = objService.ExecQuery(strQuery)',"WQL",48)
-
- If Err.number <> 0 Then
- SA_ServeFailurepage L_INFORMATION_ERRORMESSAGE
- getObjSiteCollection = false
- exit function
- End If
-
- if siteCollection.count = 0 then
- getManagedWebSites = 0
- exit function
- end if
-
- count =0
- For Each Child In siteCollection
- redim preserve arrWebSites(count)
- arrWebSites(count) = Child.Name
- count = count + 1
- Next
-
- 'use the script managed_site.vbs here
- getManagedWebSites = arrWebSites
-
- 'Release the object
- set siteCollection = nothing
- set objService = nothing
-
- End function
-
- '-------------------------------------------------------------------------
- 'Function name: getManagedFTPSites
- 'Description: Returns an array of Managed FTP sites from reg loc
- ' WebServerAppliance\ManagedWebSites
- 'Input Variables: None
- 'Output Variables:
- 'Returns: returns an array
- 'Global Variables: None
- 'If object fails dislays the error message
- '-------------------------------------------------------------------------
- Function getManagedFTPSites()
- On Error Resume Next
- Err.Clear
-
- Dim Child
- Dim count
- Dim arrFTPSites() 'holds array of FTP sites
- Dim objService
- Dim siteCollection
- Dim strQuery
-
- Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
-
- 'form the query
- strQuery = "select * from " & GetIISWMIProviderClassName("IIs_FTPServerSetting")
- Set siteCollection = objService.ExecQuery(strQuery)
- If Err.number <> 0 Then
- SA_ServeFailurepage L_INFORMATION_ERRORMESSAGE
- getObjSiteCollection = false
- exit function
- End If
-
- if siteCollection.count = 0 then
- getManagedFTPSites = 0
- exit function
- end if
-
- count =0
- For Each Child In siteCollection
- redim preserve arrFTPSites(count)
- arrFTPSites(count) = Child.Name
- count = count + 1
- Next
-
- getManagedFTPSites = arrFTPSites
-
- 'Release objects
- set objService = nothing
- set siteCollection = nothing
-
- End function
-
- '-------------------------------------------------------------------------
- 'Function name :SetDaclForFtpDir
- 'Description :Sets DACL entries for FTP directory
- 'Input Variables :bAllowFTP, strDir, AdminName, AnonName, FTPName, strDirRoot
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function SetDaclForFtpDir(bAllowFTP, strDir, strAdminName, strAnonName, strFTPName, strDirRoot)
- On Error Resume Next
- Err.Clear
-
- SetDaclForFtpDir = FALSE
-
- Dim objService 'holds WMI Connection
- Dim strTemp
- Dim objSecSetting
- Dim objSecDescriptor 'holds Security descriptor value
- Dim strPath 'holds path
- Dim objDACL
- Dim objSiteAdminAce 'holds site admin ace
- Dim objAdminAce 'holds admin ace
- Dim objAnonAce 'holds anon ace
- Dim objAuthAce 'holds auth ace
- Dim objFTPAce 'hold FTP ace
- Dim retval 'holds return value
-
-
- Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
- objService.security_.impersonationlevel = 3
-
- 'get the sec seting for file
- strPath = "Win32_LogicalFileSecuritySetting.Path='" & strDir & "'"
- set objSecSetting = objService.Get(strPath)
-
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get Sec object for dir " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- 'get the ace's for all req users
-
- if NOT GetUserAce(objService, strAdminName , strDirRoot, CONST_FULLCONROL, objSiteAdminAce ) then
- SA_TraceOut "inc_wsa", "Failed to get ACE object for Site Admin user " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- if NOT GetUserAce(objService, SA_GetAccount_Administrator() , strDirRoot, CONST_FULLCONROL, objAdminAce ) then
- SA_TraceOut "inc_wsa", "Failed to get ACE object for Admin user " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- if NOT GetUserAce(objService, strAnonName, strDirRoot, CONST_MODIFYDELTE, objAnonAce ) then
- SA_TraceOut "inc_wsa", "Failed to get ACE object for Anon user " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- if bAllowFTP = "true" then
- if NOT GetUserAce(objService, strFTPName, strDirRoot, CONST_MODIFYDELTE, objFTPAce ) then
- SA_TraceOut "inc_wsa", "Failed to get ACE object for Anon user " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
- end if
-
- Set objSecDescriptor = objService.Get("Win32_SecurityDescriptor").SpawnInstance_()
- if Err.Number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get create the Win32_SecurityDescriptor object " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- objSecDescriptor.Properties_.Item("DACL") = Array()
- Set objDACL = objSecDescriptor.Properties_.Item("DACL")
-
- objDACL.Value(0) = objSiteAdminAce
- objDACL.Value(1) = objAdminAce
- objDACL.Value(2) = objAnonAce
-
- if bAllowFTP = "true" then
- objDACL.Value(3) = objFTPAce
- end if
-
- objSecDescriptor.Properties_.Item("ControlFlags") = 32772
- Set objSecDescriptor.Properties_.Item("Owner") = objSiteAdminAce.Trustee
-
- Err.Clear
-
- retval = objSecSetting.SetSecurityDescriptor( objSecDescriptor )
- if Err.number <> 0 then
- SA_TraceOut "site_new", "Failed to set the Security Descriptor for Root dir " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- SA_TraceOut "site_new", "In SetDaclForFtpDir success"
-
- SetDaclForFtpDir = TRUE
-
- 'Release the objects
- set objService = nothing
- set objAdminAce = nothing
- set objAnonAce = nothing
- set objAuthAce = nothing
- set objSecSetting = nothing
- set objSecDescriptor = nothing
-
- End function
-
-
- '-------------------------------------------------------------------------
- 'Function name :RemoveDaclEntry
- 'Description :Removes the DACL entry
- 'Input Variables :strDir, strDirRoot
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function RemoveDaclEntry(strDir, strDirRoot)
- On Error Resume Next
- Err.Clear
-
- RemoveDaclEntry = FALSE
-
- Dim objService
- Dim objSecSetting 'hold sec setting value
- Dim objSecDescriptor 'hold security descriptor value
- Dim strPath
- Dim objDACL
- Dim objSiteAdminAce 'hold admin ace
- Dim retval 'holds return value
-
- Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
- objService.security_.impersonationlevel = 3
-
- 'get the sec setting for file
- strPath = "Win32_LogicalFileSecuritySetting.Path='" & strDir & "'"
- set objSecSetting = objService.Get(strPath)
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get Sec object for dir " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- 'get the ace's for all req users
-
- if NOT GetUserAce(objService, SA_GetAccount_Administrators() , strDirRoot, CONST_FULLCONROL, objSiteAdminAce ) then
- SA_TraceOut "inc_wsa", "Failed to get ACE object for Administrators " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
-
- Set objSecDescriptor = objService.Get("Win32_SecurityDescriptor").SpawnInstance_()
- if Err.Number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get create the Win32_SecurityDescriptor object " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- objSecDescriptor.Properties_.Item("DACL") = Array()
- Set objDACL = objSecDescriptor.Properties_.Item("DACL")
-
- objDACL.Value(0) = objSiteAdminAce
-
- objSecDescriptor.Properties_.Item("ControlFlags") = 32772
- Set objSecDescriptor.Properties_.Item("Owner") = objSiteAdminAce.Trustee
-
- Err.Clear
-
- retval = objSecSetting.SetSecurityDescriptor( objSecDescriptor )
- if Err.number <> 0 then
- SA_TraceOut "site_Delete", "Failed to set the Security Descriptor for Root dir " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- SA_TraceOut "site_Delete", "In RemoveDaclEntry success"
-
- RemoveDaclEntry = TRUE
-
- 'Release the objects
- set objService = nothing
- set objSecSetting = nothing
- set objSecDescriptor = nothing
- set objSiteAdminAce = nothing
-
- End function
-
- '-------------------------------------------------------------------------
- 'Function name: SetExecPerms
- 'Description: Sets Execute permissions for the web site
- 'Input Variables: objService, strSiteNum
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function SetExecPerms(ActiveFormat, objService, strSiteNum)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds objpath value
- Dim objVirDir 'hold virtualdirectory path
-
- SetExecPerms = FALSE
-
- 'set application protection
- strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
-
- set objVirDir = objService.Get( strObjPath )
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "get vir dir object failed " & Hex(Err.Number)
- exit Function
- End if
-
- 'call the method to set the application Read property
- if ActiveFormat = 2 then
- objVirDir.AccessExecute = TRUE
- objVirDir.AccessScript = TRUE
- elseif ActiveFormat = 1 then
- objVirDir.AccessExecute = FALSE
- objVirDir.AccessScript = TRUE
- elseif ActiveFormat = 0 then
- objVirDir.AccessExecute = FALSE
- objVirDir.AccessScript = FALSE
- end if
-
- objVirDir.put_(WBEMFLAG)
-
- if Err.number <> 0 then
- SA_TraceOut "Web_ExecutePerms", "Failed to set exec perms" & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
-
- SetExecPerms = TRUE
-
- 'Release the object
- set objVirDir = nothing
- End Function
-
- '------------------------------------------------------------------------------------
- 'Function name :GetNonInheritedIISSites
- 'Description :Gets all sites that are not Inheriting settings from the master
- 'Input Variables :objService,strClassName,strMasterClassName,arrProp
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------------------
- Function GetNonInheritedIISSites(objService,strClassName,strMasterClassName,arrProp)
- On Error Resume Next
- Err.Clear
-
- Dim strQuery 'holds query value
- Dim objInstances
- Dim objInst
- Dim count
- Dim strPropCollection
- Dim arrMasterPropVal
- Dim strTemp
- Dim arrWebSites()
- Dim strManagedSites
- Dim managedCount
- Dim siteCollection
- Dim Child
-
- strQuery = "select * from " & GetIISWMIProviderClassName("IIs_WebServerSetting") & " where ServerID = ServerComment"
-
- Set siteCollection = objService.ExecQuery(strQuery)
-
- If Err.number <> 0 or siteCollection.count=0 Then
- GetNonInheritedIISSites = 0
- exit function
- End If
-
- count =0
- For Each Child In siteCollection
- redim preserve arrWebSites(count)
- arrWebSites(count) = Child.Name
- count = count + 1
- Next
-
- redim arrMasterPropVal(ubound(arrProp))
-
- for count =0 to UBound(arrProp)
- strPropCollection = strPropCollection & arrProp(count) & ","
- next
-
- strPropCollection = left(strPropCollection,len(strPropCollection)-1)
-
- strQuery = "select " & strPropCollection & " from " & strMasterClassName
-
- set objInstances = objService.ExecQuery(strQuery)
-
- for each objInst in objInstances
-
- for count = 0 to UBound(arrProp)
- if vartype(objInst.Properties_.Item(arrProp(count))) = 11 then '11 for boolean
- 'if the property type is boolean, we cannot convert it to a string directly
- 'string conversion of vbscript is browser preference dependent
- 'we need to convert boolean to english strings(true/false), otherwise wmi query fails
- if objInst.Properties_.Item(arrProp(count)) then
- arrMasterPropVal(count) = "'" & "True" & "'"
- else
- arrMasterPropVal(count) = "'" & "False" & "'"
- end if
- elseif vartype(objInst.Properties_.Item(arrProp(count))) = 8 then '8 for string
- arrMasterPropVal(count) = "'" & objInst.Properties_.Item(arrProp(count)) & "'"
-
- elseif vartype(objInst.Properties_.Item(arrProp(count))) = 3 then '3 for integer
- arrMasterPropVal(count) = objInst.Properties_.Item(arrProp(count))
-
- end if
-
- next
-
- next
-
- 'Release objects
- set objInstances = nothing
-
- for count = 0 to UBound(arrProp)
- strTemp = strTemp & arrProp(count) & " !=" & arrMasterPropVal(count) & " or "
- next
-
- strTemp = left(strTemp,len(strTemp)-3)
- strTemp = " ( " & strTemp & " ) "
-
- for managedCount = 0 to UBound(arrWebSites)
- if strClassName = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") then
- strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "/Root' and " & strTemp & " or "
- else
- strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "' and " & strTemp & " or "
- end if
- next
-
- strManagedSites = left(strManagedSites,len(strManagedSites)-3)
- strQuery = "select * from " & strClassName & " where " & strManagedSites
- set objInstances = objService.ExecQuery(strQuery)
- set GetNonInheritedIISSites = objInstances
- End Function
-
- '------------------------------------------------------------------------------------
- 'Function name :GetNonInheritedFTPSites
- 'Description :Gets all sites that are not Inheriting settings from the master
- 'Input Variables :objService,strClassName,strMasterClassName,arrProp
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------------------
- Function GetNonInheritedFTPSites(objService,strClassName,strMasterClassName,arrProp)
- On error Resume Next
- Err.Clear
-
- Dim strQuery
- Dim objInstances
- Dim objInst
- Dim count
- Dim strPropCollection 'holds prop collection
- Dim arrMasterPropVal
- Dim strTemp
- Dim arrWebSites() 'holds array websites collection
- Dim strManagedSites 'holds managed webites collection
- Dim managedCount
- Dim siteCollection
- Dim Child
-
- strQuery = "select * from " & GetIISWMIProviderClassName("IIs_FTPServerSetting")
-
- Set siteCollection = objService.ExecQuery(strQuery)
-
- If Err.number <> 0 or siteCollection.count=0 Then
- GetNonInheritedFTPSites = 0
- exit function
- End If
-
- count =0
- For Each Child In siteCollection
- redim preserve arrWebSites(count)
- arrWebSites(count) = Child.Name
- count = count + 1
- Next
-
- redim arrMasterPropVal(ubound(arrProp))
-
- for count =0 to UBound(arrProp)
- strPropCollection = strPropCollection & arrProp(count) & ","
- next
-
- strPropCollection = left(strPropCollection,len(strPropCollection)-1)
- strQuery = "select " & strPropCollection & " from " & strMasterClassName
- set objInstances = objService.ExecQuery(strQuery)
-
- for each objInst in objInstances
- for count = 0 to UBound(arrProp)
- if vartype(objInst.Properties_.Item(arrProp(count))) = 11 then '11 for boolean
- 'if the property type is boolean, we cannot convert it to a string directly
- 'string conversion of vbscript is browser preference dependent
- 'we need to convert boolean to english strings(true/false), otherwise wmi query fails
- if objInst.Properties_.Item(arrProp(count)) then
- arrMasterPropVal(count) = "'" & "True" & "'"
- else
- arrMasterPropVal(count) = "'" & "False" & "'"
- end if
- elseif vartype(objInst.Properties_.Item(arrProp(count))) = 8 then '8 for string
- arrMasterPropVal(count) = "'" & objInst.Properties_.Item(arrProp(count)) & "'"
- elseif vartype(objInst.Properties_.Item(arrProp(count))) = 3 then '3 for integer
- arrMasterPropVal(count) = objInst.Properties_.Item(arrProp(count))
- end if
- next
- next
-
- 'Release objects
- set objInstances = nothing
-
- for count = 0 to UBound(arrProp)
- ' Must handle null values in the WMI master service object to prevent invalid
- ' queries from causing errors even when non-inherited sites existed.
- if (not IsNull(arrMasterPropVal(count))) then
- strTemp = strTemp & arrProp(count) & " !=" & arrMasterPropVal(count) & " or "
- else
- strTemp = strTemp & arrProp(count) & " IS NOT NULL or "
- end if
- next
- strTemp = left(strTemp,len(strTemp)-3)
- strTemp = " ( " & strTemp & " ) "
- for managedCount = 0 to UBound(arrWebSites)
- if strClassName = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") then
- strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "/Root' and " & strTemp & " or "
- else
- strManagedSites = strManagedSites & " Name = '" & arrWebSites(managedCount) & "' and " & strTemp & " or "
- end if
- next
-
- strManagedSites = left(strManagedSites,len(strManagedSites)-3)
- strQuery = "select * from " & strClassName & " where " & strManagedSites
-
- ' "WQL" and 0 parameters used to get error information immediately rather than
- ' when first accessing the results.
- set objInstances = objService.ExecQuery(strQuery, "WQL", 0)
- set GetNonInheritedFTPSites = objInstances
- End Function
-
- '------------------------------------------------------------------------------------
- 'Function name :GetDomainName
- 'Description :Function to get the domain name
- 'Input Variables :none
- 'Output Variables :None
- 'Returns :String -domain name
- '-------------------------------------------------------------------------------------
- Function GetDomainName
- Err.clear
- On Error Resume Next
-
- Dim objSystem
-
- Set objSystem = CreateObject("WinntSystemInfo")
- GetDomainName = objSystem.domainname
-
- 'Checking for the error condition
- If Err.number <> 0 then
- GetDomainName = ""
- end IF
- End function
-
- '-------------------------------------------------------------------------
- 'Function name :SetWebDefaultPage
- 'Description :set the default page of web
- 'Input Variables :strDefaultPage
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Function SetWebDefaultPage(objService,strDefaultPage,strSiteNum)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath
- Dim objWebSite
-
- SetWebDefaultPage = False
-
- strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
- Set objWebSite = objService.Get(strObjPath)
-
- If Err.number <> 0 Then
- SA_TraceOut "site_new", "Failed to get the IIs_WebServer Object with error " & strObjPath
- Exit Function
- End if
-
- objWebSite.DefaultDoc = strDefaultPage
- objWebSite.put_(WBEMFLAG)
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to set default Page"
- Set objWebSite = Nothing
- Exit Function
- End If
-
- SetWebDefaultPage = True
- Set objWebSite = Nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name :GetWebDefaultPage
- 'Description :get the default page of web
- 'Input Variables :strDefaultPage
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Function GetWebDefaultPage(objService,strDefaultPage,strSiteNum)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath
- Dim objWebSite
-
- GetWebDefaultPage = ""
-
- strObjPath = GetIISWMIProviderClassName("IIs_WebVirtualDirSetting") & ".Name=" & chr(34) & strSiteNum & "/ROOT" & chr(34)
- Set objWebSite = objService.Get(strObjPath)
-
- If Err.number <> 0 Then
- SA_TraceOut "site_new", "Failed to get the IIs_WebServer Object with error " & strObjPath
- Exit Function
- End if
-
- GetWebDefaultPage = objWebSite.DefaultDoc
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Failed to get default Page"
- Set objWebSite = Nothing
- Exit Function
- End If
-
- Set objWebSite = Nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name :UpdateFrontPage
- 'Description :updates the frontpage extensions
- 'Input Variables :strSiteName
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Function UpdateFrontPage(bUpdateFront, strSiteName, strUserName)
- On Error Resume Next
- Err.Clear
-
- '
- ' Default return value is success (TRUE)
- UpdateFrontPage = TRUE
-
- if (bUpdateFront = TRUE OR Trim(UCase(bUpdateFront)) = "TRUE") then
-
- UpdateFrontPage = InstallFrontPageWeb(strSiteName, strUserName)
-
- elseif (bUpdateFront = FALSE OR Trim(UCase(bUpdateFront)) = "FALSE") then
-
- UpdateFrontPage = UnInstallFrontPageWeb(strSiteName)
-
- else
- Call SA_TraceOut("INC_WSA", "Function UpdateFrontPage: Invalid argument bUpdateFront=(" & bUpdateFront & ")")
- end if
-
- End function
-
- '----------------------------------------------------------------------------
- 'Function name :GetBindings
- 'Description :Serves in Getting the data in the form of "ipaddress:tcpport:hostheader"
- 'Input Variables :TCP/IP,PORT,HOST HEADER
- 'Output Variables :None
- 'Returns :Bindings
- 'Global Variables :None
- '----------------------------------------------------------------------------
- function GetBindings (tempip, temptcp, temphost )
- Err.Clear
- On Error Resume Next
-
- Dim retval ' To hold the return value
- ' if tcpport not specified set default to 80
- if trim(temptcp)= "" then
- temptcp = "80"
- end if
-
- ' return in the form "ipaddress:tcpport:hostheader"
- if isempty(tempip) = false then
- retval = tempip & ":" & temptcp & ":"
- else
- retval = ":" & temptcp & ":"
- end if
- if isempty(temphost) = false then
- retval = retval & temphost
- end if
- GetBindings = retval
- end function
-
- '----------------------------------------------------------------------------
- 'Function name :GetWebAdministrtorRole
- 'Description :used to get the web adminitrator role
- 'Input Variables :TCP/IP,PORT,HOST HEADER
- 'Output Variables :None
- 'Returns :"Domain user" or "localuser"
- 'Global Variables :None
- '----------------------------------------------------------------------------
-
- Function GetWebAdministrtorRole(objService, strSiteNum, ByRef strAdminName)
- On Error Resume Next
- Err.Clear
-
- Dim strQuery
- Dim objAdminColection
- Dim inst
- Dim strAdminRole
- Dim arrField
- Dim strSysName
- Dim strDirectoryRoot
-
- GetWebAdministrtorRole = ""
- strAdminName = ""
-
- strQuery = "select * from " & GetIISWMIProviderClassName("IIs_ACE") & " where name = "& _
- chr(34)&strSiteNum&chr(34)
-
- Set objAdminColection = objService.ExecQuery(strQuery)
- If Err.number <> 0 Then
- SA_TraceOut "Failed to get web Administrator"
- exit Function
- End if
-
- For each inst in objAdminColection
- If inst.AccessMask = 11 Then
- strAdminName = inst.Trustee
- Exit For
- End If
- Next
-
- If strAdminName = "" Then
- Exit Function
- End If
-
- arrField = split(strAdminName,"\")
-
- If ubound(arrField) <> 1 Then
- Exit Function
- End If
-
- strAdminRole = ucase(arrField(0))
-
- Call GetDomainRole(strDirectoryRoot, strSysName)
-
- If strAdminRole = ucase(strSysName) Then
- GetWebAdministrtorRole = "Local User"
- Else
- GetWebAdministrtorRole = "Domain User"
- End If
-
- Set objAdminColection = nothing
- Set inst = nothing
- End Function
-
- '----------------------------------------------------------------------------
- 'Function name :CreateVirFTPSite
- 'Description :Serves in create virtual ftp site
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean (True if new site is created else returns False)
- 'Global Variables :None
- 'Functions Used :
- '----------------------------------------------------------------------------
- Function CreateVirFTPSite(objService, user, path, bRead, bWrite, bLog)
- On Error Resume Next
- Err.Clear
-
- Dim objVirFTP
- Dim strUser
-
- CreateVirFTPSite = False
- Set objVirFTP = objService.Get(GetIISWMIProviderClassName("IIs_FtpVirtualDirSetting")).SpawnInstance_
- If Err.number <> 0 Then
- Call SA_TraceOut("inc_wsa", "Failed to get new Instance of "& _
- "IIs_FtpVirtualDirSetting " & "(" & Hex(Err.Number) & ")")
- Exit Function
- End If
-
- '
- ' objVirFTP.put_(WBEMFLAG) will silently fail (Err variable will not be set correctly)
- ' if we use a user name that has the form <DomainName>\<UserName>.
- ' So we remove the <DomainName>, if it is part of the user name
- '
- If ( InStr(F_strAdminName, "\") <> 0 ) Then
- Dim arrId
-
- arrId = split(F_strAdminName,"\")
- strUser = arrId(1)
- Else
- strUser = F_strAdminName
- End If
-
-
- objVirFTP.Name = GetAdminFTPServerName() & "/ROOT/"& strUser
- objVirFTP.Path = path
- objVirFTP.AccessRead = bRead
- objVirFTP.AccessWrite = bWrite
- objVirFTP.DontLog = NOT bLog
-
- objVirFTP.put_(WBEMFLAG)
-
- If Err.number <> 0 Then
- Call SA_TraceOut("inc_wsa", "Failed to Create FTP site "& _
- "(" & Hex(Err.Number) & ")")
- Exit Function
- End If
-
- Set objVirFTP = Nothing
- CreateVirFTPSite = True
- End Function
-
- '----------------------------------------------------------------------------
- 'Function name :DeleteVirFTPSite
- 'Description :Serves in delete virtual ftp site
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean (True if new site is created else returns False)
- 'Global Variables :None
- 'Functions Used :
- '----------------------------------------------------------------------------
- Function DeleteVirFTPSite(objService, user)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds site collection
- Dim objVirFTPSite 'holds instance of the site
-
- DeleteVirFTPSite = False
-
- strObjPath = GetIISWMIProviderClassName("IIs_FtpVirtualDirSetting") & ".Name=" & chr(34) & GetAdminFTPServerName() & "/ROOT/"&user & chr(34)
- Set objVirFTPSite = objService.Get(strObjPath)
- If Err.Number <> 0 Then
- Call SA_TraceOut("inc_wsa","Unable to get the virtual ftp site object ")
- Exit Function
- End If
-
- 'delete the object
- objVirFTPSite.Delete_
- if Err.Number <> 0 then
- SA_TraceOut "inc_wsa", "Unable to delete the virtual ftp site "
- Exit Function
- End If
-
- DeleteVirFTPSite = True
-
- 'Release the object
- set objVirFTPSite = nothing
- End Function
-
- '----------------------------------------------------------------------------
- 'Function name :IsUserVirFTPInstalled
- 'Description :Serves in determin that user vir FTP Installed
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean (True if new site is created else returns False)
- 'Global Variables :None
- 'Functions Used :
- '----------------------------------------------------------------------------
- Function IsUserVirFTPInstalled(objService, user)
- On Error Resume Next
- Err.Clear
-
- Dim strQuery 'holds query string
- Dim objVirFTPSiteCollect 'holds site collection
-
- IsUserVirFTPInstalled = False
-
-
- 'strQuery = "Select * from " & GetIISWMIProviderClassName("IIs_FtpVirtualDirSetting") & " where Name="&chr(34)&"MSFTPSVC/1/ROOT/"&user&chr(34)
- strQuery = "Select * from " & GetIISWMIProviderClassName("IIs_FtpVirtualDirSetting") & " where Name="&chr(34)& GetAdminFTPServerName() & "/ROOT/"&user&chr(34)
- Set objVirFTPSiteCollect = objService.ExecQuery(strQuery)
-
- If Err.Number <> 0 or objVirFTPSiteCollect.count=0 Then
- set objVirFTPSiteCollect = nothing
- Exit Function
- End If
-
- IsUserVirFTPInstalled = True
-
- 'Release the object
- set objVirFTPSiteCollect = nothing
- End Function
-
- '----------------------------------------------------------------------------
- 'Function name :IsFTPServiceInstalled
- 'Description :Serves in wheather the FTP service be installed
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean (True if new site is created else returns False)
- 'Global Variables :None
- 'Functions Used :
- '----------------------------------------------------------------------------
- Function IsFTPServiceInstalled(objService)
- On Error Resume Next
- Err.Clear
-
- Dim ObjCollection
- Dim objInst
-
- IsFTPServiceInstalled = False
-
- Set ObjCollection = objService.Instancesof(GetIISWMIProviderClassName("IIs_FtpServiceSetting"))
- If Err.number <>0 then
- Call SA_TRACEOUT("IsFTPServiceInstalled","Failed to get service")
- Exit Function
- end if
-
- For Each objInst In ObjCollection
- If ucase(objService.name) = "objInst" Then
- IsFTPServiceInstalled = True
- Exit Function
- End If
- Next
-
- Set ObjCollection = Nothing
- Set objInst = Nothing
- End Function
-
- '----------------------------------------------------------------------------
- 'Function name :IsValidWebPort(strSiteID,strPort)
- 'Description :Used to determin wheather the web port is valid
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean (True for valid web port)
- 'Global Variables :None
- 'Functions Used :
- '----------------------------------------------------------------------------
- Function IsValidWebPort(strSiteID, strPort)
- On Error Resume Next
- Err.Clear
-
- Dim objService
- Dim objCollection
- Dim objSite
- Dim arrBindings
- Dim strTmp
-
-
- IsValidWebPort = True
- If strPort = "" Then
- strPort = "80"
- End If
- Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- If Err.Number <> 0 Then
- Call SA_TRACEOUT("inc_wsa","Faild to connect WMI object")
- End If
- Set ObjCollection = objService.Instancesof(GetIISWMIProviderClassName("IIs_WebServerSetting"))
- For Each objSite In ObjCollection
-
- 'Check to see if iis6.0 wmi provider is intalled
- If IsIIS60Installed Then
- strTmp = objSite.ServerBindings(0).Port
- Else
-
- arrBindings = Split(objSite.ServerBindings(0),":")
- strTmp = arrBindings(1)
- End If
-
- If strPort = strTmp Then
-
-
- Call SA_TRACEOUT("IsValidWebPort", "strSiteID="&strSiteID)
- Call SA_TRACEOUT("IsValidWebPort", "objSite.ServerID="&objSite.ServerID)
- If CStr(objSite.ServerID) <> strSiteID Then
- IsValidWebPort = False
- Exit Function
- End If
- End If
- Next
-
- Set objSite = Nothing
- Set ObjCollection = Nothing
- Set objService = Nothing
-
- End Function
-
- '
- ' The following two function is very useful to set the permissiton to
- ' directory, when set the web root permission, we call these function
- '
- '-------------------------------------------------------------------------
- 'Function name: GetUserAce
- 'Description: Get the ACLs of the user
- 'Input Variables: objService, strUserName, strDomain, nAccessMask, ByRef objACE
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function GetUserAce(objService, strUserName, strDomain, nAccessMask, ByRef objACE)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds query string
- Dim objAcct 'holds query result
- Dim objSID 'holds security identifier
- Dim objTrustee 'holds trustee value
-
- GetUserAce = FALSE
-
- strObjPath = "Win32_UserAccount.Domain=" & chr(34) & strDomain & chr(34) & ",Name=" & chr(34) & strUserName & chr(34)
-
- set objAcct = objService.Get(strObjPath)
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get Win32_UserAccount Object " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- set objSID = objService.Get("Win32_SID.SID='" & objAcct.SID & "'")
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get Win32_SID Object " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- set objTrustee = objService.Get("Win32_Trustee").SpawnInstance_
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get new Instance of Win32_Trustee " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- objTrustee.Name = strUserName
- objTrustee.Domain = strDomain
- objTrustee.SID = objSID.BinaryRepresentation
- objTrustee.SIDString = objSID.SID
- objTrustee.SidLength = objSID.SidLength
- set objACE = objService.Get("Win32_ACE").SpawnInstance_
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to Create Win32_Ace Object " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- objACE.AccessMask = nAccessMask
- objACE.Aceflags = 3
- objACE.AceType = 0
- objACE.Trustee = objTrustee
- SA_TraceOut "inc_wsa", "In GetUserAce function success"
- GetUserAce = TRUE
-
- 'Release objects
- set objAcct = nothing
- set objSID = nothing
- set objTrustee = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name: GetGroupAce
- 'Description: Get the ACLs of the group
- 'Input Variables: objService, strGroupName, strDomain, nAccessMask, ByRef objACE
- 'Returns: boolean
- '--------------------------------------------------------------------------
- Function GetGroupAce(objService, strGroupName, strDomain, nAccessMask, ByRef objACE)
- On Error Resume Next
- Err.Clear
-
- Dim strObjPath 'holds query string
- Dim objAcct 'holds query result
- Dim objSID 'holds security identifier
- Dim objTrustee 'holds trustee value
-
- GetGroupAce = FALSE
-
- strObjPath = "Win32_Group.Domain=" & chr(34) & strDomain & chr(34) & ",Name=" & chr(34) & strGroupName & chr(34)
-
- set objAcct = objService.Get(strObjPath)
- if Err.number <> 0 then
- Call SA_TraceOut("inc_wsa", "Get Win32_Group failed: " + CStr(Hex(Err.Number)) + " " + Err.Description)
- Call SA_TraceOut("inc_wsa", "-->Object path: " + CStr(strObjPath) )
- exit function
- end if
-
- set objSID = objService.Get("Win32_SID.SID='" & objAcct.SID & "'")
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get Win32_SID Object " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- set objTrustee = objService.Get("Win32_Trustee").SpawnInstance_
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to get new Instance of Win32_Trustee " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- objTrustee.Name = strGroupName
- objTrustee.Domain = strDomain
- objTrustee.SID = objSID.BinaryRepresentation
- objTrustee.SIDString = objSID.SID
- objTrustee.SidLength = objSID.SidLength
- set objACE = objService.Get("Win32_ACE").SpawnInstance_
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa", "Failed to Create Win32_Ace Object " & "(" & Hex(Err.Number) & ")"
- exit function
- end if
-
- objACE.AccessMask = nAccessMask
- objACE.Aceflags = 3
- objACE.AceType = 0
- objACE.Trustee = objTrustee
- SA_TraceOut "inc_wsa", "In GetGroupAce function success"
- GetGroupAce = TRUE
-
- 'Release objects
- set objAcct = nothing
- set objSID = nothing
- set objTrustee = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name :ModifyUserInOu
- 'Description :Modify User settings in OU
- ' group
- 'Input Variables :strUserName,strOuName, strGrpName
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Function ModifyUserInOu(strSiteID,strDomain,strUserName, strPassword, strGrpName)
- On Error Resume Next
- Err.Clear
-
- Dim oUser 'holds user object
- Dim objComputer 'holds computer object
-
- ModifyUserInOu = false
-
- SA_TraceOut "inc_wsa.asp", "In ModifyUserInOu"
-
- Set objComputer = GetObject("WinNT://" & strDomain)
- Set oUser = objComputer.GetObject("user" , trim(strUserName))
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa.asp", "In ModifyUserInOu, get user pswd failed "
- SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
- Array("user " & trim(strUserName)))
- Exit Function
- End if
-
- oUser.setPassword(trim(strPassword))
- oUser.SetInfo()
- if Err.number <> 0 then
- mintTabSelected = 0
- If Err.number = &H800708C5 Then
- SetErrMsg L_ERR_PASSWORD_POLICY
- Else
- SetErrMsg L_SETPW_ERRORMESSAGE
- End If
- exit Function
- end if
-
- SA_TraceOut "inc_wsa.asp", "In ModifyUserInOu successfull"
-
- 'release objects
- set oUser = nothing
- set objComputer = nothing
-
- ModifyUserInOu = true
- End function
-
- '-------------------------------------------------------------------------
- 'Function name :GetRandomPassword
- 'Description :Generates a random password
- 'Input Variables :None
- 'Output Variables :strPassword
- 'Returns :string
- 'Global Variables :None
- '-------------------------------------------------------------------------
-
- Function GetRandomPassword
-
- On Error Resume Next
- Err.Clear
-
-
- GetRandomPassword = ""
-
- Dim objSAHelper
- Dim strPassword
-
- Set objSAHelper = server.CreateObject("ServerAppliance.SAHelper")
-
- if Err.number <> 0 then
- Call SA_TraceOut ("inc_wsa", "createobject for sahelper failed")
- exit function
- else
- strPassword = objSAHelper.GenerateRandomPassword(14)
- if Err.number <> 0 then
- Call SA_TraceOut ("inc_wsa", "generate random password failed")
- Set objSAHelper = Nothing
- exit function
- end if
- end if
-
- GetRandomPassword = strPassword
-
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name :SetPasswdInAD
- 'Description :Create Users in OU and adds the user to specified
- ' group
- 'Input Variables :strUserName,strOuName
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Function SetPasswdInAD(strSiteID,strUserName, strPassword)
- On Error Resume Next
- Err.Clear
-
- Dim oUser 'holds user object
- Dim oRoot 'holds root object
- Dim oOUWebSites 'holds OU website
- Dim oOUSiteID 'holds OU siteid
-
-
- SetPasswdInAD = False
-
- SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD"
-
- SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD strSiteID: " + strSiteID
- SA_traceOut "G_strDirRoot: " , G_strDirRoot
-
- Set oRoot = GetObject("LDAP://" & G_strDirRoot)
- If Err.number <> 0 Then
- SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
- Array("LDAP://" & G_strDirRoot))
- SA_TraceOut "inc_wsa.asp", "Connect to LDAP failed"
- Exit Function
- End if
-
- Set oOUWebSites = oRoot.GetObject("organizationalUnit", "ou=WebSites")
- If err.number <> 0 Then
- SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
- Array("WebSites organizational unit"))
- SA_TraceOut "inc_wsa.asp", _
- "In SetPasswdInAD, get ou web sites failed"
- Exit Function
- End If
-
- Set oOUSiteID = oOUWebSites.GetObject("organizationalUnit", "ou=" & strSiteID)
- If err.number<>0 Then
- SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
- Array(strSiteID & " organizational unit"))
- SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD, get ou siteid failed"
- Exit Function
- End If
-
- SA_traceout "strUserName: ", strUserName
-
- Set oUser = oOUSiteID.GetObject("User", "cn=" + strUserName )
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD, GetObject user failed "
- SetErrMsg L_CREATEUSER_ERRORMESSAGE
- Exit Function
- End If
-
-
- oUser.setPassword(strPassword)
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD, SetPassword ** failed ** "
- SetErrMsg L_CREATEUSER_ERRORMESSAGE
- Exit Function
- End If
-
- oUser.SetInfo()
- if Err.number <> 0 then
- SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD, SetInfo failed "
- SetErrMsg L_CREATEUSER_ERRORMESSAGE
- Exit Function
- end if
-
-
- SA_TraceOut "inc_wsa.asp", "In SetPasswdInAD successfull"
-
- 'release objects
- Set oUser = nothing
- Set oOUWebSites = nothing
- Set oOUSiteID = nothing
- Set oRoot = nothing
-
-
- SetPasswdInAD = true
-
- End function
-
- '-------------------------------------------------------------------------
- 'Function name :SetPasswdInNT
- 'Description :Set password in NT
- 'Input Variables :strUserName -- username to set the password for
- 'Input Variables :strPassword -- password to be used
- 'Returns :True or False
- 'Global Variables :None
- '-------------------------------------------------------------------------
-
- Function SetPasswdInNT( strDomainName, strUserName, strPassword )
- On Error Resume Next
- Err.Clear
-
- Dim objComputer
- Dim objUser
-
- SetPasswdInNT = False
-
- SA_TraceOut "inc_wsa.asp", "In SetPasswdInNT"
-
- SA_TraceOut "strDomainName:", strDomainName
- 'SA_TraceOut "G_strSysName:", G_strSysName
- Set objComputer = GetObject("WinNT://" & strDomainName)
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "failed to GetObject in SetPasswdinNT : G_strSysName: " + G_strSysName
- SetErrMsg SA_GetLocString("Sitearea.dll", "C04201D4", _
- Array("WinNT://" & strDomain))
- Exit Function
- End if
-
- Set objUser = objComputer.GetObject("User" , strUserName)
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "failed to GetObject in SetPasswdinNT : strUserName: " + strUserName
- SetErrmsg L_ERR_GET_USER_OBJECT
- Exit Function
- End If
-
- objUser.setPassword(trim(strPassword))
- objUser.SetInfo()
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "failed to SetInfo in SetPasswdinNT : strPassword: " + strPassword
- If Err.number = &H800708C5 Then
- SetErrMsg L_ERR_PASSWORD_POLICY
- Else
- SetErrMsg L_UNABLETOSET_PASSWORD_ERRORMESSAGE
- End If
- Exit Function
- End If
-
- 'Release the object
- set objUser = nothing
- set objComputer = nothing
-
-
- SetPasswdInNT = TRUE
- Call SA_TRACEOUT("SetPasswdInNT","return success")
-
- End Function
-
-
- '---------------------------------------------------------------------
- ' Function name: isFileExisting
- ' Description: To verify the existence of the file
- ' Input Variables: strFileToVerify-file name along with its path
- ' Output Variables: None
- ' Return Values: TRUE - if file exists , else FALSE
- ' Global Variables: None
- '---------------------------------------------------------------------
- Function isFileExisting(strFile)
- Err.Clear
- On Error Resume Next
-
- Dim objFSO
- Set objFSO = CreateObject("Scripting.FileSystemObject")
-
- ' If the file is existing, return true, else false
- If objFSO.FileExists(strFile) Then
- isFileExisting = True
- Else
- isFileExisting = False
- End If
-
- Set objFSO = Nothing
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name :LaunchProcess
- 'Description :Launches a new process
- 'Input Variables :strCommand, strCurDir
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function LaunchProcess(strCommand, strCurDir)
- On error Resume Next
- Err.Clear
-
- Dim objService 'holds WMI Connection
- Dim objClass 'holds query result
- Dim objProc 'holds query result of Win32_process
- Dim objProcStartup 'holds class spawninstance value
- Dim nretval 'holds return value
- Dim nPID
- Dim objTemp 'holds temporary value
-
- nretval = 0
-
- Set objService=getWMIConnection("root\cimv2")
- Set objClass = objService.Get("Win32_ProcessStartup")
- Set objProcStartup = objClass.SpawnInstance_()
- objProcStartup.ShowWindow = 2
- Set objProc = objService.Get("Win32_Process")
- nretval = objProc.Create(strCommand, strCurDir, objProcStartup,nPID)
-
- If Err.number <> 0 Then
- Call SA_TraceOut(SA_GetScriptFileName(), "Function LaunchProcess failed, error: " & Hex(Err.Number) & " " & Err.Description)
- LaunchProcess = FALSE
- Exit function
- End If
-
- SA_TraceOut "inc_wsa", "Launch Process " & strCommand & " from path " & strCurDir & " successful "
-
- LaunchProcess = TRUE
-
- 'Release objects
- Set objService= nothing
- Set objClass = nothing
- Set objProcStartup = nothing
- Set objProc = nothing
- End Function
-
-
- '-------------------------------------------------------------------------
- '-------------------------------------------------------------------------
- '
- ' Functions to handle FrontPageServerExtension.
- '
- ' 1) FPSE (2000, 2002) may be installed on the server (host).
- ' 2) For IIS 6.0, FPSE may be enabled or diabled.
- ' 3) For each website, FPSE may be installed.
- '
- ' The interfaces are:
- '
- ' 1) IsFrontPageInstalled (return true if any version installed)
- ' 2) IsFrontPageInstalledOnWebSite (return true if any version installed on the website)
- ' 3) InstallFrontPageWeb (install FPSE 2002 if found, otherwise install 2000)
- ' 4) UnInstallFrontPageWeb (uninstall the correct version of FPSE on the website)
- '
- '-------------------------------------------------------------------------
- '-------------------------------------------------------------------------
-
-
- '-------------------------------------------------------------------------
- 'Function name :isFrontPageInstalled
- 'Description :Returns whether fron page extensions are installed on
- ' server or not
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Public Function isFrontPageInstalled(objService)
-
- '
- ' Check if FP 2000 is installed
- isFrontPageInstalled = isFrontPage2000Installed(objService)
-
- '
- ' If NOT then check if FP 2002 is installed
- If ( false = isFrontPageInstalled ) Then
- isFrontPageInstalled = isFrontPage2002Installed(objService)
- End If
-
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name :isFrontPage2000Installed
- 'Description :Returns whether FPSE2000 are installed or not
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Private Function isFrontPage2000Installed(ByRef objService)
- On Error Resume Next
- Err.Clear
-
- Dim objFrontPage 'holds frontpage query result
-
- isFrontPage2000Installed = false
-
- set objFrontPage = objService.Get("IIs_filter.Name=" & chr(34) & CONST_FRONTPAGE_PATH & chr(34))
-
- If Err.number <> 0 then
- SA_TraceOut "inc_wsa.asp", "Frontpage extensions not set. Error = " & Err.number
- exit function
- else
- if NOT IsObject(objFrontPage) then
- exit function
- end if
- isFrontPage2000Installed = true
- end if
-
- 'release the object
- set objFrontPage = nothing
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name :isFrontPage2002Installed
- 'Description :Returns whether FPSE2002 are installed or not
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean
- 'Global Variables :None
- '-------------------------------------------------------------------------
- Private Function isFrontPage2002Installed(ByRef objService)
- on error resume next
-
- isFrontPage2002Installed = FALSE
-
- Dim aValues
- Dim x
- Dim objRegistry
-
- Set objRegistry = RegConnection()
- If (NOT IsObject(objRegistry)) Then
- Call SA_TraceOut(SA_GetScriptFileName(), "RegConnection() failed in function isFrontPage2002Installed, error: " & Hex(Err.Number) & " " & Err.Description )
- Exit Function
- End If
-
-
- '
- ' Search for FP Server Extensions 2002 installed reg key
- aValues = RegEnumKey( objRegistry, "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0")
- If ( IsNull(aValues) ) Then
- Exit Function
- End If
- 'Call SA_TraceOut(SA_GetScriptFileName(), "RegEnumKey: " & "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0")
- for x = LBound(aValues) to UBound(aValues)
- If ( IsNull(aValues(x)) ) Then
- Exit Function
- End If
- 'Call SA_TraceOut(SA_GetScriptFileName(), "RegKeyValue: " & aValues(x))
- If ( Trim(aValues(x)) = Trim(CONST_FRONTPAGE_2002_INSTALLED) ) Then
- isFrontPage2002Installed = true
- exit for
- End If
- Next
-
- '
- ' Search for SharePoint installed reg key
- aValues = RegEnumKeyValues( objRegistry, "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0")
- If ( IsNull(aValues) ) Then
- Exit Function
- End If
- 'Call SA_TraceOut(SA_GetScriptFileName(), "RegEnumKeyValues for: " & "SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\5.0")
- for x = LBound(aValues) to UBound(aValues)
- If ( IsNull(aValues(x)) ) Then
- Exit Function
- End If
- 'Call SA_TraceOut(SA_GetScriptFileName(), "RegKeyValue: " & aValues(x))
- If ( Trim(aValues(x)) = Trim(CONST_SHAREPOINT_INSTALLED) ) Then
- isFrontPage2002Installed = true
- exit for
- End If
- Next
-
- Set objRegistry = nothing
-
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name :InstallFrontPageWeb
- 'Description :Installs Front Page Extensions on the machine
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function InstallFrontPageWeb(strSiteName, strUserName)
- On Error Resume Next
- Err.Clear
-
- Dim objRegConn 'holds regeconnection
- Dim strLocationFPSE2000 'holds location of string in registry
- Dim strLocationFPSE2002 'holds location of the FPSE 2002 location
- Dim strCommand 'holds string
- Dim retval 'holds return value
-
- InstallFrontPageWeb = FALSE
-
- Set objRegConn = RegConnection()
-
- if isFrontPage2002Installed Then
-
- strLocationFPSE2002 = GetRegKeyValue(objRegConn,CONST_FRONTPAGE_2002_REGLOC,"Location",CONST_STRING)
-
- strLocationFPSE2002 = strLocationFPSE2002 & "\" & "bin"
-
- 'SA_TraceOut "inc_wsa", "strLocationFPSE2002: " & strLocationFPSE2002
-
- strCommand = "cmd.exe /c " & chr(34) & "owsadm.exe -o install -p /LM/" & strSiteName & " -type msiis -u " & strUserName & chr(34)
-
- 'SA_TraceOut "inc_wsa", "strCommandFPSE2002: " & strCommand
-
- InstallFrontPageWeb = LaunchProcess(strCommand, strLocationFPSE2002)
-
- ElseIf isFrontPage2000Installed Then
-
- strLocationFPSE2000 = GetRegKeyValue(objRegConn,CONST_FRONTPAGE_REGLOC,"Location",CONST_STRING)
-
- strLocationFPSE2000 = strLocationFPSE2000 & "\" & "bin"
-
- 'SA_TraceOut "inc_wsa", "strLocationFPSE2000: " & strLocationFPSE2000
-
- strCommand = "cmd.exe /c " & chr(34) & "fpsrvadm.exe -o install -p /LM/" & strSiteName & " -type msiis -u " & strUserName & chr(34)
-
- 'SA_TraceOut "inc_wsa", "strCommandFPSE2000: " & strCommand
-
- InstallFrontPageWeb = LaunchProcess(strCommand, strLocationFPSE2000)
-
- Else
-
- call SA_TraceOut("inc_wsa", "Function InstallFrontPageWeb: Frontpage Extension not Installed on the server")
-
- End If
-
- 'Release objects
- Set objRegConn = nothing
-
- End Function
-
- '-------------------------------------------------------------------------
- 'Function name :UnInstallFrontPageWeb
- 'Description :UnInstalls Front Page Extensions on the machine
- 'Input Variables :None
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function UnInstallFrontPageWeb(strSiteName)
- On Error Resume Next
- Err.Clear
-
- Dim objRegConn 'holds regeconnection
- Dim strLocationFPSE2000 'holds location of string in registry
- Dim strLocationFPSE2002 'holds location of the FPSE 2002 location
- Dim strCommand 'holds string
- Dim retval 'holds return value
-
- UnInstallFrontPageWeb = FALSE
-
- Set objRegConn = RegConnection()
-
- if IsFrontPage2002InstalledOnWebSite(strSiteName) Then
-
- strLocationFPSE2002 = GetRegKeyValue(objRegConn,CONST_FRONTPAGE_2002_REGLOC,"Location",CONST_STRING)
-
- strLocationFPSE2002 = strLocationFPSE2002 & "\" & "bin"
-
- 'SA_TraceOut "inc_wsa", "strLocationFPSE2002: " & strLocationFPSE2002
-
- strCommand = "cmd.exe /c " & chr(34) & "owsadm.exe -o uninstall -p /LM/" & strSiteName & chr(34)
-
- 'Call SA_TraceOut("inc_wsa", "Function UnInstallFrontPageWeb: FPSE 2002 command: " & strCommand)
-
- UnInstallFrontPageWeb = LaunchProcess(strCommand, strLocationFPSE2002)
-
- ElseIf IsFrontPage2000InstalledOnWebSite(strSiteName) Then
-
- strLocationFPSE2000 = GetRegKeyValue(objRegConn,CONST_FRONTPAGE_REGLOC,"Location",CONST_STRING)
-
- strLocationFPSE2000 = strLocationFPSE2000 & "\" & "bin"
-
- 'SA_TraceOut "inc_wsa", "strLocationFPSE2000: " & strLocationFPSE2000
-
- strCommand = "cmd.exe /c " & chr(34) & "fpsrvadm.exe -o uninstall -p /LM/" & strSiteName & chr(34)
-
- 'Call SA_TraceOut("inc_wsa", "Function UnInstallFrontPageWeb: FPSE 2000 command: " & strCommand)
-
- UnInstallFrontPageWeb = LaunchProcess(strCommand, strLocationFPSE2000)
-
- Else
-
- call SA_TraceOut("inc_wsa", "Function UnInstallFrontPageWeb: Frontpage Extension not installed on the server")
-
- End If
-
- 'Release objects
- Set objRegConn = nothing
-
- End Function
-
-
-
- '-------------------------------------------------------------------------
- 'Function name :IsFrontPageInstalledOnWebSite
- 'Description :Determines whether front page extensions are installed
- ' on that web site
- 'Input Variables :strSysName, strSiteName
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function IsFrontPageInstalledOnWebSite(strSysName, strSiteName)
- On Error Resume Next
- Err.Clear
-
- 'Dim objSite 'holds IIS root object
-
- IsFrontPageInstalledOnWebSite = false
-
- If IsFrontPage2000InstalledOnWebSite( strSiteName) or IsFrontPage2002InstalledOnWebSite( strSiteName) Then
-
- IsFrontPageInstalledOnWebSite = true
-
- End If
-
- 'Set objSite = GetObject("IIS:")
- 'Set objSite = objSite.OpenDSObject("IIS://" & strSysName & "/" & strSiteName, "", "", 1)
- 'if Err.number <> 0 then
- ' Err.Clear
- ' SA_TraceOut "inc_wsa", "Failed to determine whether front page extensions are installed for site: " & strSiteName
- ' Exit function
- 'end if
- 'IsFrontPageInstalledOnWebSite = objSite.FrontPageWeb
-
- 'Release the objects
- 'set objSite = nothing
- End Function
-
-
-
- '-------------------------------------------------------------------------
- 'Function name :IsFrontPage2000InstalledOnWebSite
- 'Description :Determines whether front page extensions are installed
- ' on that web site
- 'Input Variables :strSysName, strSiteName
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function IsFrontPage2000InstalledOnWebSite( strSiteName)
- On Error Resume Next
- Err.Clear
-
- Dim objRegConn 'registry connection
- Dim strSitePortLoc 'registry key location of the website
- Dim strFrontPageRoot
- Dim strAuthoring
-
- IsFrontPage2000InstalledOnWebSite = false
-
- ' The registry key is the same for all OS versions
- strSitePortLoc = CONST_PORT_REGLOC & "Port /LM/" & strSiteName & ":"
-
- Set objRegConn = RegConnection()
-
- strAuthoring = GetRegKeyValue(objRegConn,strSitePortLoc,"authoring",CONST_STRING)
-
- strFrontPageRoot = GetRegKeyValue(objRegConn,strSitePortLoc,"frontpageroot",CONST_STRING)
-
- if Ucase(strAuthoring) = "ENABLED" and instr(strFrontPageRoot, "\40") Then
-
- IsFrontPage2000InstalledOnWebSite = true
-
- End If
-
- set objRegConn = nothing
-
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name :IsFrontPage2002InstalledOnWebSite
- 'Description :Determines whether front page extensions are installed
- ' on that web site
- 'Input Variables :strSysName, strSiteName
- 'Output Variables :None
- 'Returns :Boolean
- '-------------------------------------------------------------------------
- Function IsFrontPage2002InstalledOnWebSite( strSiteName)
- On Error Resume Next
- Err.Clear
-
- Dim objRegConn 'registry connection
- Dim strSitePortLoc 'registry key location of the website
- Dim strFrontPageRoot
- Dim strAuthoring
-
- IsFrontPage2002InstalledOnWebSite = false
-
- ' The registry key is the same for all OS versions
- strSitePortLoc = CONST_PORT_REGLOC & "Port /LM/" & strSiteName & ":"
-
- Set objRegConn = RegConnection()
-
- strAuthoring = GetRegKeyValue(objRegConn,strSitePortLoc,"authoring",CONST_STRING)
-
- strFrontPageRoot = GetRegKeyValue(objRegConn,strSitePortLoc,"frontpageroot",CONST_STRING)
-
- if Ucase(strAuthoring) = "ENABLED" and instr(strFrontPageRoot, "\50") Then
-
- IsFrontPage2002InstalledOnWebSite = true
-
- End If
-
- set objRegConn = nothing
-
- End Function
-
- '-------------------------------------------------------------------------
- '-------------------------------------------------------------------------
- '
- ' Functions to handle FTP
- '
- '
- '
- '-------------------------------------------------------------------------
- '-------------------------------------------------------------------------
-
- '-------------------------------------------------------------------------
- 'Function name: IsFTPEnabled
- 'Description: Initialization of global variables is done
- 'Input Variables: None
- 'Returns: true/false
- 'Global Variables: G_objService
- ' G_objSites
- '--------------------------------------------------------------------------
-
- Function IsFTPEnabled()
- Err.Clear
- on error resume next
-
- Dim objFTP
- Dim objFTPList
- Dim objService
-
- IsFTPEnabled = false
-
- ' Get instances of IIS_FTPServiceSetting that are visible throughout
- Set objService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
- set objFTPList = objService.InstancesOf(GetIISWMIProviderClassName("IIS_FTPService"))
-
- For each objFTP in objFTPList
- if objFTP.State = CONST_SERVICE_RUNNING_STATE Then
- IsFTPEnabled = true
- End If
- Next
-
- if Err.number <> 0 then
- IsFTPEnabled = false
- Err.Clear
- end if
-
- set objtFTPList = nothing
- set objFTP = nothing
- set objService = nothing
-
- end function
-
-
- '-------------------------------------------------------------------------
- 'Function name: EnableFTP
- 'Description: Enable FTP service and set it's state to automatic
- 'Input Variables: None
- 'Returns: None
- 'Global Variables:
- '--------------------------------------------------------------------------
- Function EnableFTP()
- Err.Clear
- on error resume next
-
- Dim objFTP
- Dim objService
-
- EnableFTP = false
-
- ' Get instances of IIS_FTPServiceSetting that are visible throughout
- Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
- set objFTP = objService.get("Win32_Service.Name='MSFTPSVC'")
-
- Call objFTP.ChangeStartMode("Automatic")
- Call objFTP.StartService()
- EnableFTP = true
-
- if Err.number <> 0 then
- EnableFTP = false
- Err.Clear
- end if
-
- set objFTP = nothing
- set objService = nothing
-
- end function
-
-
-
- '-------------------------------------------------------------------------
- 'Function name: DisableFTP
- 'Description: Diable FTP service and set it's state to manual
- 'Input Variables: None
- 'Returns: None
- 'Global Variables:
- '--------------------------------------------------------------------------
- Function DisableFTP()
- Err.Clear
- on error resume next
-
- Dim objFTP
- Dim objService
-
- DisableFTP = false
-
- ' Get instances of IIS_FTPServiceSetting that are visible throughout
- Set objService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
- set objFTP = objService.get("Win32_Service.Name='MSFTPSVC'")
-
- Call objFTP.ChangeStartMode("Manual")
- Call objFTP.StopService()
- DisableFTP = true
-
- if Err.number <> 0 then
- DisableFTP = false
- Err.Clear
- end if
-
- set objFTP = nothing
- set objService = nothing
-
- end function
- '-------------------------------------------------------------------------
- 'Function name: SetFPSEOption
- 'Description: Set FPSE Option in the registry
- 'Input Variables:
- 'Returns: None
- 'Global Variables:
- '--------------------------------------------------------------------------
- Function SetFPSEOption(bEnableFPSE)
-
- dim objRegConn
- dim iFPSEOption
- Set objRegConn = RegConnection()
-
- 'Init the value to be set to the regval
- if bEnableFPSE Then
- iFPSEOption = 1
- Else
- iFPSEOption = 0
- End If
-
- call updateRegkeyvalue(objRegConn,CONST_WEBBLADES_REGKEY,CONST_FPSEOPTION_REGVAL,iFPSEOption,CONST_DWORD)
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Set regvalue for FPSEOption failed " & Hex(Err.Number)
- exit Function
- End if
-
- End Function
-
-
- '-------------------------------------------------------------------------
- 'Function name: GetFPSEOption
- 'Description: Get FPSE Option in the registry. If the regval is 1, it means
- ' PFSE is enabled by default for all Website created thru WebUI,
- ' and GetFPSEOption return true. Otherwise return false.
- 'Input Variables:
- 'Returns: True if PFSE is enabled by default for all Website created thru WebUI
- 'Global Variables:
- '--------------------------------------------------------------------------
- Function GetFPSEOption()
-
- dim objRegConn
- dim iFPSEOption
-
- GetFPSEOption = false
-
- Set objRegConn = RegConnection()
-
- iFPSEOption = GetRegKeyValue(objRegConn,CONST_WEBBLADES_REGKEY,CONST_FPSEOPTION_REGVAL,CONST_DWORD)
-
- If Err.number <> 0 Then
- SA_TraceOut "inc_wsa", "Get regvalue for FPSEOption failed " & Hex(Err.Number)
- exit Function
- End if
-
- if iFPSEOption = 1 then
- GetFPSEOption = true
- End If
-
- End Function
-
- '-------------------------------------------------------------------------
- '-------------------------------------------------------------------------
- '
- ' Functions to handle ASP enable/disable
- '
- '
- '
- '-------------------------------------------------------------------------
- '-------------------------------------------------------------------------
-
- '-------------------------------------------------------------------------
- 'Function name: IsASPEnabled
- 'Description: Check if ASP is enable at the webroot (for all website)
- 'Input Variables: None
- 'Returns: None
- 'Global Variables:
- '--------------------------------------------------------------------------
- Function IsASPEnabled()
- Err.Clear
- on error resume next
- IsASPEnabled = false
-
- end function
-
-
- '-------------------------------------------------------------------------
- 'Function name: EnableASP
- 'Description: Enable ASP for all the website (at the webroot)
- 'Input Variables: None
- 'Returns: None
- 'Global Variables:
- '--------------------------------------------------------------------------
- Function EnableASP()
- Err.Clear
- on error resume next
- end function
-
- '-------------------------------------------------------------------------
- 'Function name: DisableASP
- 'Description: Diable ASP at the webroot (except Administration site)
- 'Input Variables: None
- 'Returns: None
- 'Global Variables:
- '--------------------------------------------------------------------------
- Function DisableASP()
- Err.Clear
- on error resume next
- end function
-
-
-
-
- '-------------------------------------------------------------------------
- '-------------------------------------------------------------------------
- '
- ' Helper functions for common UI between site.new and site.modify
- '
- '
- '
- '-------------------------------------------------------------------------
- '-------------------------------------------------------------------------
-
- '-------------------------------------------------------------------------
- 'Function name: IsFTPAllowedOnSite
- 'Description: Determines whether we should allow an FTP virtual
- ' directory to be created for this site based on
- ' the ACLs on the root directory for the site. If
- ' interactive users are allowed access, we
- ' deem the site unsafe for FTP access and disable
- ' the option.
- 'Input Variables: strPath Local path of root directory
- ' for this site.
- 'Returns: True if FTP access should be allowed and False
- ' otherwise.
- 'Global Variables: None
- '--------------------------------------------------------------------------
- Function IsFTPAllowedOnSite(strPath)
- On Error Resume Next
- IsFTPAllowedOnSite = True
-
- '
- ' Get the WMI path to the security settings for the web root.
- '
- Dim strFolderSecurityPath
- strFolderSecurityPath = "Win32_LogicalFileSecuritySetting.Path=""" & strPath & """"
-
- ' Replace single backslashes with double backslashes.
- Dim oRegExp
- Set oRegExp = New RegExp
- oRegExp.Pattern = "\\"
- oRegExp.Global = true
- strFolderSecurityPath = oRegExp.Replace(strFolderSecurityPath, "\\")
-
-
- '
- ' Open the object for the web root directory. If the directory doesn't
- ' exist, assume this is a new site.
- '
- Dim oService
- Set oService = getWMIConnection(CONST_WMI_WIN32_NAMESPACE)
-
- Dim oFolderSecurity
- Set oFolderSecurity = oService.Get(strFolderSecurityPath)
-
- If (wbemErrNotFound = Err.number) Then
- ' The directory doesn't exist, so allow FTP
- IsFTPAllowedOnSite = True
- Exit Function
- End If
-
- Dim oSecurityDescriptor
- If (0 = oFolderSecurity.GetSecurityDescriptor(oSecurityDescriptor)) Then
- Dim oACE
- For Each oACE In oSecurityDescriptor.DACL
- Dim oTrustee
- Set oTrustee = oACE.Trustee
- If ((SIDSTRING_INTERACTIVE = oTrustee.SIDString) And _
- (0 <> oACE.AccessMask)) Then
- '
- ' Interactive users have access, which suggests that
- ' FPSE have been installed on this site before. Even if
- ' FPSE haven't been installed, this site is not secure
- ' enough to allow FTP access.
- IsFTPAllowedOnSite = False
- End If
- Next
- End If
-
- If (Err.number <> 0) Then
- ' This should never happen, but fail securely if it does.
- IsFTPAllowedOnSite = False
- End If
- End Function
-
- '-------------------------------------------------------------------------
- 'Sub name: ServeAppSettings
- 'Description: Serves common UI between site new and site modify
- ' pages on application settings tabs. Currently
- ' displays only settings below default page values.
- ' Should be expanded in the future to include all UI
- ' for this tab.
- 'Input Variables: strPath Local path of root directory
- ' for this site.
- ' strUploadMethod The method currently used to
- ' upload content to this site.
- ' See constants defined above
- ' for valid values (e.g.,
- ' UPLOADMETHOD_NEITHER)
- ' strAnonymousChecked The value passed in the form
- ' submission for the anonymous
- ' checkbox (e.g., "true").
- 'Returns: None
- 'Global Variables: Localized strings from resources.asp
- '--------------------------------------------------------------------------
- Sub ServeAppSettings(strPath, strUploadMethod, strAnonymousChecked, bNewSite)
- On Error Resume Next
-
- '
- ' Calculate the attributes of the radio buttons and checkbox based on
- ' the current settings on the site.
- '
- Dim oIISService
- Set oIISService = getWMIConnection(CONST_WMI_IIS_NAMESPACE)
-
- Dim strNeitherAttributes
- strNeitherAttributes = "CHECKED"
-
- Dim strFPSEAttributes
- Dim strFTPAttributes
-
- ' Check FrontPage extensions
- If (isFrontPageInstalled(oIISService)) Then
- If (strUploadMethod = UPLOADMETHOD_FPSE) Then
- strFPSEAttributes = "CHECKED"
- strNeitherAttributes = ""
- Else
- strFPSEAttributes = ""
- End If
- Else
- strFPSEAttributes = "DISABLED"
- End If
-
- ' Check FTP
- If ((Not IsFTPEnabled()) Or (Not IsAdminFTPServerExistAndRunning())) Then
- strFTPAttributes = "DISABLED"
- ElseIf (Not IsFTPAllowedOnSite(strPath)) Then
- If (strUploadMethod = UPLOADMETHOD_FTP) Then
- strFTPAttributes = "CHECKED DISABLED"
- strNeitherAttributes = ""
- Else
- strFTPAttributes = "DISABLED"
- End If
- Else
- If (strUploadMethod = UPLOADMETHOD_FTP) Then
- strFTPAttributes = "CHECKED"
- strNeitherAttributes = ""
- Else
- strFTPAttributes = ""
- End If
- End If
-
- ' Check anonymous access
- Dim strAnonymousAttributes
- If ("true" = strAnonymousChecked) Then
- strAnonymousAttributes = "CHECKED"
- Else
- strAnonymousAttributes = ""
- End If
-
- '
- ' Output the UI based on the settings processed above.
- '
-
- '
- ' Note: FrontPage messages not HTML encoded to allow ® to be
- ' displayed correctly.
- '
- %>
- <TABLE WIDTH="400" ALIGN="left" BORDER="0" CELLSPACING="0" CELLPADDING="0"
- CLASS="TasksBody">
- <TR>
- <TD CLASS="TasksBody" COLSPAN="3" NOWRAP>
- <%=Server.HTMLEncode(L_CONTENT_UPLOADMETHOD_TITLE)%>
- </TD>
- </TR>
- <TR>
- <TD CLASS="TasksBody" WIDTH="15px"> </TD>
- <TD CLASS="TasksBody">
- <INPUT TYPE="radio" CLASS="FormRadioButton" NAME="radUploadMethod"
- VALUE="<%=UPLOADMETHOD_FPSE%>" <%=strFPSEAttributes%>>
- </TD>
- <TD CLASS="TasksBody" NOWRAP>
- <%=L_APPL_FRONT_PAGE_EXTN_TEXT%>
- </TD>
- </TR>
- <TR>
- <TD CLASS="TasksBody" COLSPAN="2"> </TD>
- <TD CLASS="TasksBody">
- <%=Server.HTMLEncode(L_FRONTPAGEFTP_WARNING_TEXT)%>
- </TD>
- </TR>
- <TR>
- <TD CLASS="TasksBody" WIDTH="15px"> </TD>
- <TD CLASS="TasksBody">
- <INPUT TYPE="radio" CLASS="FormRadioButton" NAME="radUploadMethod"
- VALUE="<%=UPLOADMETHOD_FTP%>" <%=strFTPAttributes%>>
- <TD CLASS="TasksBody" NOWRAP>
- <%=Server.HTMLEncode(L_CREATE_FTP_SITE)%>
- </TD>
- </TR>
- <TR>
- <TD CLASS="TasksBody" WIDTH="15px"> </TD>
- <TD CLASS="TasksBody">
- <INPUT TYPE="radio" CLASS="FormRadioButton" NAME="radUploadMethod"
- VALUE="<%=UPLOADMETHOD_NEITHER%>" <%=strNeitherAttributes%> ID="Radio1">
- </TD>
- <TD CLASS="TasksBody" NOWRAP>
- <%=Server.HTMLEncode(L_CONTENT_UPLOADMETHOD_NEITHER)%>
- </TD>
- </TR>
- <TR><TD CLASS="TasksBody" COLSPAN="3"> </TD></TR>
- <TR>
- <TD CLASS="TasksBody" COLSPAN="3" NOWRAP>
- <INPUT TYPE="checkbox" CLASS="formField" NAME="chkAllow" VALUE="ON"
- <%=strAnonymousAttributes%>>
- <%=Server.HTMLEncode(L_ALLOW_ANONYMOUS_ACCESS)%>
- </TD>
- </TR>
- </TABLE>
- <%
- End Sub
- %>
-